Hardware-accelerated high availability integrated networked storage system

ABSTRACT

Disclosed is a system and methods for acceleration of the TCP/IP and the iSCSI protocols. The methods may be adapted to a wide variety of systems and applications that employ communications protocols including TCP, with or without iSCSI. Using a hardware-based acceleration approach, common case network traffic is rapidly processed at near line rate thereby improving overall performance and alleviating processing bottlenecks.

RELATED APPLICATIONS

This U.S. patent application claims priority to U.S. provisional patentapplication No. 60/448,207 entitled “High availability integratedstorage network processing for iSCSI communication” filed Feb. 14, 2003the disclosure of which is hereby incorporated by reference in itsentirety. Additionally, the application is related to commonly-assignedco-pending applications entitled “Network receive interface for highbandwidth hardware-accelerated packet processing”, application Ser. No.10/781,552, now U.S. Pat. No. 7,460,473, filed Feb. 17, 2004 and “Systemand methods for high rate hardware-accelerated network protocolprocessing”, application Ser. No. 10/781,553, now U.S. Pat. No.7,389,462, filed Feb. 17, 2004 the disclosure of which is herebyincorporated by reference in its entirety.

BACKGROUND

1. Field

This invention generally relates to high data rate networking andstorage networking. More particularly, this invention relates to asystem and methods for hardware acceleration of a high data ratenetworking or storage networking device or system.

2. Description of Related Art

Recently, systems and software have been developed for networkingapplications wherein it is necessary or desirable to executecommunications protocols at very high data rates. For example,conventional networked storage systems, including those that areblock-based, file-based, or object-based may require bandwidth-intensiveaccess to storage devices using communications protocols and subsystems.Additionally, robust and efficient networking implementations may berequired for high-traffic network security systems such as firewallswith intrusion detection and prevention mechanisms. Similarly, Layer 4-7networking systems, including by way of example: server load balancers,web switches, SSL accelerators, web servers, traffic managers, andnetworking gateways are often associated with high bandwidth traffic andit may be desirable to provide mechanisms for acceleration of thesesystems to improve performance.

The aforementioned systems and software generally communicate usingnetworking protocols such as TCP/IP (Transmission Control Protocol overInternet Protocol) and can benefit from performance improvementsaccomplished by accelerating the execution of the underlying networkprotocol. Furthermore, performance enhancements in other communicationsprotocols coupled with TCP/IP, including for example the Internet SmallComputer Systems Interface (iSCSI) network storage protocol, aredesirable when implementing systems and applications designed for highspeed data throughput.

Network storage protocols represent a relatively new advancement foraccessing data over storage networks and form the basis for diverseclasses of network storage solutions wherein data is remotely stored anddistributed within both storage area networks (SANs) and across largerpublic networks, including the Internet. The iSCSI transport protocolstandard defines one such approach for accessing and transporting dataover commonly utilized communications networks. Using the iSCSI commandand instruction set, conventional Small Computer Systems Interface(SCSI) commands, typically associated with communication within locallymaintained storage devices, may be encapsulated in a network-compatibleprotocol wrapper allowing SCSI communication between devices in a remotemanner. The iSCSI protocol may further be used by a host computer systemor device to perform block data input/output (I/O) operations with anyof a variety of peripheral target devices. Examples of target devicesmay include data storage devices such as disk, tape, and optical storagedevices, as well as, printers, scanners, and other devices that may benetworked to one another to exchange information.

In conventional environments, block data operations associated with theiSCSI protocol are structured so as to be compatible with the generalmanner of processing associated with existing storage devices. As withthe standard SCSI protocol, iSCSI information exchange is based oncommunication between agents (e.g. client/server model). AniSCSI-compliant device that requests a connection to the storage deviceand issues an initial series of SCSI commands is referred to as theiSCSI initiator. An iSCSI-compliant device that completes the connectionto the initiator and receives the initial SCSI commands is referred toas the iSCSI target. One function of the initiator is to generate SCSIcommands (e.g. data storage and access requests) that are passed throughan iSCSI conversion layer where the SCSI commands are encapsulated asiSCSI protocol data units (PDUs). Thereafter, the iSCSI PDUs may be sentacross a network to the target device where the underlying SCSIinstructions and data are extracted and processed. In a similar manner,the target device may transmit data and information prepared using theSCSI responses and encapsulated as iSCSI PDUs to be returned to theinitiator.

Running over layers of the TCP/IP protocol suite, iSCSI communication inthe aforementioned manner is a computationally intensive process. Theprincipal components of this process can be subdivided into: headerprocessing, protocol processing, and data movement. Header processingincludes parsing of packet headers at various layers of the protocol,extracting relevant information from headers, updating information asneeded, performing tasks implied by the contents of the headers,creating headers for outgoing packets, and other related tasks. Protocolprocessing may include generating messages as specified by the protocoland maintaining/updating the protocol state at each agent (e.g.initiator/target) involved. Additional protocol processing steps mayinclude performing connection setups and teardowns, generatingAcknowledgements with protocol-dependent parameters, maintaining windowsizes for each connection, performing retransmissions as required, andmaintaining timers. Data movement refers to storing and retrieving data,typically from a network interface to a memory device or vice versa.

When executed in a principally software implementation, it may take onaverage approximately one million cycles on a commercially availablegeneral purpose processor to perform all the necessary computations anddata movements for 1 million bits of data received and transmitted overa network interface. Thus, to achieve a data rate of 10 Gigabits/secover a conventional network interface, a 10 GHz processor would betheoretically necessary under software-based network protocol resolutiontechniques. Presently, processors of this speed are not available andeven if available, would not be economical and efficient to use for thispurpose. Thus, there exists a need to enhance and accelerate theprocessing of communication protocols such as TCP/IP and iSCSI toovercome the limitations of conventional software-based network protocolresolution methods.

SUMMARY

The present teachings describe a system and methods for acceleration ofthe TCP/IP protocol suite and the iSCSI protocol. The methods may beadapted to a wide variety of systems and applications that employcommunications protocols including TCP, with or without iSCSI. Whilecertain embodiments described herein are based on TCP and iSCSIprotocols, it will be appreciated that the methods may be adapted foruse with other networking protocols (e.g. UDP, SCTP, iWarp protocolsuite, SDP, and DDP) and applications to improve networking and storagenetworking performance.

Certain embodiments of the present teachings describe a system andmethods for processing network packets at high data rates near or atfull line speed (e.g. 10 Gbits/sec or more using Ethernet) and maysignificantly benefit systems where processing packets is a principlefunction of the system and processing at or near the peak rate of thenetworking interface is desired.

These methods may be adapted for highly accelerated TCP/IP processingalone or in connection with accelerated processing of iSCSI commands anddata contained in TCP/IP streams. The disclosed methods may further beapplied to build a high speed iSCSI-based network-attached storagesystem using various hardware-based acceleration techniques. As will besubsequently described in greater detail, TCP/IP and iSCSI processing isperformed in a preferred embodiment by a Protocol Intercept Engine (PIE)subsystem with a network-attached storage hardware solution embodied ina Storage Networking Processor (iSNP).

In one aspect, the invention comprises a system for remotely accessingstorage devices across a network. This system further comprises: atleast one storage device configured to store and retrieve informationbased upon instructions issued in accordance with a first instructionset; and a networked storage controller configured to issue instructionsto the at least one storage device in accordance with the firstinstruction set, the storage controller further configured to receivenetwork communications containing embedded instructions in a secondinstruction set corresponding to storage and retrieval requests from atleast one network device, wherein the networked storage controller isconfigured with a hardware-based acceleration module used for processingcommon case network communications relating to storage and retrievalrequests in the second instruction set that are translated intoinstructions in the first instruction set and subsequently issued to theat least one storage device, and a software-based module used forprocessing non-common case network communications including exceptionsand errors in network communications.

In another aspect, the invention comprises a system for Internet SmallComputer System Interface (iSCSI) command resolution and processing overa TCP/IP network. This system further comprises: a host deviceconfigured to receive network data requests from at least one remotelylocated client device; at least one storage device associated with thehost device and configured to store and retrieve information accordingto a Small Computer System Interface (SCSI) instruction set; and acontroller. The controller further comprises, a storage networkprocessor configured with a hardware accelerator module to processTCP/IP network traffic received from the client device containing iSCSIinstructions and data, the storage network processor further configuredto transform the iSCSI instructions into SCSI instructions to be issuedto the at least one storage device; a memory area for buffering data tobe subsequently transferred between the host device and the at least onestorage device; a storage device interface used for transmitting andreceiving data and SCSI instructions between the controller and the atleast one storage device; and a network device interface configured tocommunicate with the at least one remotely located client device andused for transmitting and receiving data and iSCSI instructions.

In yet another aspect, the invention comprises a system for high datarate access to a storage device over a network. This system furthercomprises: an initiator device configured to transmit network storageand retrieval requests using an Internet Small Computer System Interface(iSCSI) protocol; and a target device configured to receive networkstorage and retrieval requests in the iSCSI protocol which are forwardedto a storage network processor associated with the target device, thestorage network processor configured with a hardware-acceleratedprotocol processing module used to transform the iSCSI protocol requestsinto Small Computer System Interface (SCSI) protocol requests that aresubsequently forwarded to the storage device for further processing andexecution.

In still another aspect, the invention comprises a system foraccelerated TCP and iSCSI protocol processing. This system furthercomprises: a storage network processor (SNP) configured to offload atleast some packet processing tasks from a general purpose processorassociated with a host device, the storage network processor furthercomprising: a hardware-accelerated receive module configured to receiveTCP network packets; a hardware-accelerated TCP protocol processingmodule configured to process common case TCP network packets to resolveembedded iSCSI instructions; and a hardware-accelerated transmit moduleconfigured to transmit TCP network packets.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an exemplary communications system for remoteinformation storage and retrieval.

FIG. 2 illustrates a high level block diagram for an iSCSI hardwaresolution.

FIG. 3A illustrates a high level block diagram for an iSNP solution usedto provide iSCSI processing functionality.

FIG. 3B is a functional view of the iSNP hardware, illustrating the flowof information through the system.

FIGS. 4A-B provide an overview of storage networking and the iSCSIprotocol in the context of the iSNP solution.

FIGS. 5A-G illustrate details of the composition of an exemplary iSCSIprotocol data unit including its format and header composition inaddition to the corresponding components of information related to thenetworking stack.

FIG. 6A illustrates a block diagram of the principal functionalcomponents of the Protocol Intercept Engine (PIE).

FIG. 6B illustrates a block diagram of processing functionalities of thePIE architecture.

FIG. 6C illustrates a block diagram of PIE processing and accelerationpaths as they relate to the iSNP solution.

FIG. 7 illustrates an exemplary flow diagram for network data pathcontrol and resolution.

FIG. 8A illustrates a block diagram detailing PIE transmit data pathcontrol and resolution functions.

FIG. 8B illustrates the congestion management functionality of the PIEarchitecture

FIG. 9 illustrates a functional diagram of some of the components of thePIE architecture that provide for acceleration of data storage andretrieval requests.

FIG. 10 is a block diagram that summarizes the principal functionalitiesof a PIE receive module.

FIG. 11 illustrates a detailed block diagram of the principal componentsof a PIE receive pipeline.

FIGS. 12A-B illustrate exemplary descriptors and tags used in networkingpackets associated with the PIE architecture.

FIG. 13A illustrates states of a state machine associated with the PIEarchitecture.

FIG. 13B illustrates exemplary slow path reason codes associated withthe PIE architecture.

FIG. 14 illustrates exemplary requests that can be made to a CAMcomponent of the PIE architecture.

FIG. 15 illustrates exemplary types of information that may be extractedby a parser associated with the PIE architecture.

FIG. 16 illustrates exemplary dispatcher frame contexts for the PIEarchitecture.

FIG. 17 illustrates a block diagram of routing functionality provided bya dispatcher component associated with the PIE architecture.

FIG. 18A illustrates a decision tree detailing fast-path/slow-pathswitching in the context of the PIE architecture.

FIG. 18B illustrates a summary of fields maintained in a FPRAM regionassociated with a iSCSI PDU Engine.

FIG. 18C illustrates a block diagram of the flow of information throughthe iSCSI PDU Engine.

FIG. 19 illustrates a detailed block diagram for a Acknowledgement,Windowing, and Retransmission (AWR) subsystem of the PIE architecture.

FIG. 20 illustrates an exemplary real time accelerator subsystem.

FIG. 21 illustrates a block diagram of a PIE-Tx path and its associatedmodules.

FIG. 22 illustrates an exemplary entry in an iSCSI Tx queue.

FIG. 23 illustrates an iSCSI Tx PDU application.

FIG. 24 illustrates an iSCSI connection control structure.

FIG. 25 illustrates exemplary raw Tx queue entries.

FIG. 26 illustrates an exemplary command set supported by a memorystructure accelerator.

FIG. 27 illustrates a block diagram of a memory structure accelerator(MSA).

FIG. 28 illustrates exemplary bit patterns for a command bus.

FIG. 29 illustrates an exemplary status information bus.

FIG. 30 illustrates a block diagram of an A2B Tap.

FIG. 31 illustrates exemplary Data In and Data Out FIFOs.

FIG. 32 illustrates an exemplary software signaling approach.

FIG. 33 illustrates an empty queue/stack descriptor initializationroutine.

FIG. 34 illustrates an exemplary preloaded queue/stack descriptorinitialization.

DETAILED DESCRIPTION OF CERTAIN EMBODIMENTS

Although certain embodiments and examples are disclosed below, it willbe understood by those of ordinary skill in the art that the inventionextends beyond the specifically disclosed embodiments to otheralternative embodiments and uses of the invention and obviousmodifications and equivalents thereof. Thus, it is intended that thescope of the invention herein disclosed should not be limited by theparticular disclosed embodiments described below.

In the context of the present teachings, offloading and acceleration areterms used primarily in the context of a networking protocol suite, suchas TCP/IP. Offloading refers to those computational activities whereby aportion or substantially all of the processing associated with acommunications protocol stack is acted upon by an entity other than themain processor in a host computer (e.g. host CPU). Offloading reducesthe computational load on the main processor and increases itsavailability for executing other application software rather thanperforming networking functions. Acceleration relates to the use ofspecial-purpose hardware components such as an application specificintegrated circuit (ASIC) that may be used to perform tasks faster ormore efficiently than a general-purpose processor. In certain aspects,acceleration may be distinct from offloading. For instance, TCPprocessing may be offloaded to a general purpose processor apart fromthe host CPU—in which case, there is offloading but no acceleration. TCPprocessing may also be offloaded to a hardware accelerator, wherein theprocessing task is not only offloaded from the host CPU, but is alsoperformed at a higher rate than that of a general-purpose processor. Incertain embodiments, acceleration is desirable when a system isconfigured to handle high rates/quantities of network traffic.Presently, certain commercial general purpose processors or embeddedprocessors can be used for offloading TCP computational tasks, however,such systems typically require that the rate of network traffic be lowerthan approximately 3-4 Gbits/sec, for network traffic rates above that,acceleration may be required.

Partial acceleration may also be possible wherein certain networkprocessing aspects are accelerated and others are not. For example,dedicated hardware solutions rather than a general purpose processor maybe used for TCP checksum computation and verification. DMA engines mayalso be used for offloading data movement from the host processor.Packet classification (examining packet headers and extracting neededinformation) may also be performed by a hardware-based solution. Whilemethods for offloading with “partial acceleration” have been disclosedin various contexts in conventional systems, these systems are typicallyconfigured to handle only a relatively small degree of offloading and/ora small degree of acceleration and, as such, are generally only adequatefor processing packets at lower rates. Higher traffic rates (e.g. 4-10Gbits/sec or more) require a larger degree of offloading capability witha correspondingly larger degree of acceleration that is generally notcapable of being efficiently provided by conventional systems. Thesystem and methods of the present teachings address this problem toextend offloading and acceleration capabilities beyond that provided byconventional systems.

The following discussion relates to aspects and details of offloadingand acceleration of TCP/IP and iSCSI protocol processing. Aspecification and implementation of the TCP/IP protocol stack aredescribed in: “Internetworking with TCP/IP Vol. 1: Principles,Protocols, and Architecture (4th Edition), D. E. Corner” which is herebyincorporated by reference in its entirety. Additionally, a descriptionof the specification and implementation of a current version of theiSCSI protocol is set forth by the Internet Engineering Task Force(IETF) and described in: “Internet Draft draft-ietf-ips-iscsi-19.txt”which is hereby incorporated by reference in its entirety. As used inthe Claims, the terms “TCP/IP” and iSCSI are intended to encompassfuture versions of the associated protocols.

In one aspect, the present teachings describe a remotely-accessiblestorage architecture that may be adapted for use with networks whichimplement packetized information exchange using for example,Transmission Control Protocol/Internet Protocol (TCP/IP) connectivity.Certain embodiments of the storage architecture may be implemented asstorage accessible over a wide-area network such as the Internet andenterprise networks, over an Internet Protocol Storage/System AreaNetwork (IP-SAN) that may serve as a replacement for Fibre ChannelStorage/System Area Networks (FC-SAN) as well as other conventionnetwork attached storage (NAS) and direct storage solutions.

As will be described in greater detail hereinbelow, improvements intransmission efficiency and data throughput as compared to conventionalsoftware based implementations of networked storage may be realizedusing specialized processing of TCP/IP messages and iSCSI commands andinformation. These protocol acceleration functionalities may bedesirably implemented using conventional network infrastructures withoutsignificant alterations or upgrades. For example, it is conceived thatpresent teachings may be used in connection with conventional Ethernetconfigurations wherein commonly available IP routers and Ethernetswitches direct the flow of information throughout the network. Onedesirable benefit realized when using such an implementation is that arelatively low cost and high performance network storage environment canbe created based on an existing network without the need to performsubstantial costly network upgrades.

The use of dedicated Fibre channel lines and specialized Fibre channelhardware is also not necessary to gain the benefit of high throughputnetwork storage. It will be appreciated, however, that the systems andmethods described herein may be readily adapted for use with numerousdifferent types of networking technologies, including Fibrechannel-based technologies, to help improve performance and reliabilityin network storage and data distribution. It will further be appreciatedthat the present teachings may be adapted for use in networks containingmixed technologies such as Fibre Channel over IP.

FIG. 1 illustrates an exemplary communications system for remoteinformation storage and retrieval comprising a plurality of iSCSIdevices that communicate over a network 100 which may include theInternet 101. In the illustrated embodiment, application servers 104possess suitable network functionality to exchange information withother network devices including switches and routers 105. In one aspect,the application servers 104 comprise computers or other devices whichaccess informational resources contained within a storage server 106.The storage server 106 comprises a networked storage controller 108 andat least one storage device 110. In one aspect, the storage controller108 comprises a hardware device that provides network connectivity forthe at least one storage device 110 and further communicates with theswitches and routers 105 used in the network 100.

In various embodiments, the network infrastructure which interconnectsthe application servers 104 to the storage controller 108 comprisesEthernet connectivity (at Gigabit rates) with suitable Ethernet switchesand routers 105. Although FIG. 1 is illustrated as possessing GigabitEthernet functionality, it will be appreciated that other networkclasses such as local-area networks (LANs), wide-area networks (WANs),private networks, or the Internet may be serve as a suitable networkinfrastructure. Likewise the hardware components and devices describedin connection with the present teachings may be adapted for use withthese and other network configurations including conventional wirednetworks and optical networks (e.g. Fibre Channel).

Each application server 104 uses a host bus adaptor (HBA) 114 to enablenetwork communication between the application servers 104 and thenetwork 100. Each application server 104 may further be connecteddirectly to the storage server 106 such that few, if any, switches orrouters 105 are necessary to exchange information in the storagenetwork. Additionally, multiple application servers may communicate witha single storage server, and a single application server may communicatewith multiple storage servers. In certain embodiments, link aggregation,such as that defined by the I.E.E.E. 802.3ad specification may be usedto allow for higher bandwidth than is available over a single linkbetween an application server and a storage server.

Each application server 104 transmits requests for stored resourceslocated on the storage devices 110. As will be described in greaterdetail hereinbelow, informational requests may take the form of iSCSIPDUs that are transmitted from the application server 104 to the storageserver 106. Furthermore, the HBA 114 of each application server 104 mayfully or partially offload or accelerate networking andencapsulation/de-encapsulation operations associated with forming anappropriate connection to the storage server 106. These iSCSIinstructions are received by the networked storage controller 108wherein they are decoded and the requested operations associated withthe storage devices 110 performed. In a similar manner, the controller108 may encapsulate SCSI commands and storage device information asiSCSI instructions to be transmitted to the application server 104 forprocessing.

The controller 108 may also be configured to provide other desirablefunctionalities such as high availability features that implement backupand failover provisions. In one aspect, the controller 108 may furthermanage a redundant array of independent disks (RAID) to providemirroring, error detection and correction, failover, and superiorperformance through the use of a plurality of storage devices 110interconnected to the controller 108. Additionally, two or morenetworked-storage controllers may operate in a coordinated manner toprovide additional high availability functionalities as well as loadbalancing and distribution functionalities. Another feature of thecontroller 108 is that it may be designed to be compatible withconventional iSCSI HBAs such that existing applications servers 104which already possess an iSCSI enabled HBA may not require replacementto operate with the storage server 106 of the present teachings.

In various embodiments, a management console 112 may further connect tothe network 100. The management console 112 may be associated with anapplication server 104 or other computer or software-based applicationthat remotely performs administrative functions within the storageserver 106 and/or various applications servers 104 located throughoutthe network 100. In one aspect, the management console 112 may be usedto provide software updates and/or firmware revisions to the controller108 or storage devices 110 of the storage server 106. Use of themanagement console 112 also provides a means to remotely view and modifythe operational parameters of the storage server 106 in a convenientmanner.

FIG. 2 illustrates a high level block diagram of an iSCSI hardwaresolution 120 that provides iSCSI processing functionality for thecontroller 108 and/or application server HBAs 114. In one aspect, astorage network processor (iSNP) 122 is principally responsible for theprocessing of iSCSI instructions and data. In one aspect, the iSNP 122provides the necessary functionality for processing network traffic athigh data rates, including TCP/IP and iSCSI layer processing.

A memory area 126 is further associated with the iSNP 122 wherein aportion of the memory, called buffer memory 130, may be dedicated fordata buffering functionality for iSNP 122. Principally all of the databeing transferred between host and storage device will be buffered inbuffer memory. Another portion of the memory, referred to as systemmemory 128, may be dedicated for other programs and data associated withthe storage controller application.

The iSNP 122 is further associated with a storage device interface 132.The storage device interface 132 represents a hardware interface betweenthe controller 108 and the storage devices 110. The storage deviceinterface 132 may be a conventional interface (e.g. a conventional ATAor SAS controller) or may be a dedicated design that is integrated intothe storage controller 108. In various embodiments, a compatible bus 134may provide a means for communication between the iSNP 122 and thestorage device interface 132. Furthermore, one or more storage devicecontrollers 132 may be associated with a single iSNP 122 to provideaccessibility to multiple storage devices 110 through one or more buses.Each bus 134 may further adhere to a conventionally used communicationsstandard such as a peripheral control interconnect (PCI) bus or a thirdgeneration input output (3GIO) bus.

The iSNP 122 is further associated with a suitable network interface 136to provide a means for communicating across the network 100. In oneaspect, the network interface 136 transmits and receives iSCSI PDUs andacts as an interconnect between the iSNP 122 and other devices presentin the network 100. The network interface 136 may comprise a singleinterface 138 or an aggregated interface 140 which use any of a numberof different networking implementations.

As will be described in greater detail hereinbelow, the networkinterface 136 may comprise a XGMII/XAUI interface which allowsinterconnection between a Media Access Control (MAC) sublayer of theiSNP 122 and a Physical layer (PHY) of the 10 Gigabit Ethernet network.Additionally, the network interface 136 may comprise a GMII/MII orTBI/SerDes interface for interconnecting to a 1000 based network, a100/10 based network or other network type. It will be appreciated thatnumerous different interface specifications exist for the purpose ofproviding network connectivity; as such, it is conceived that any ofthese interfaces may be configured to operate with the iSNP 122 withoutdeparting from the scope of the present teachings.

It will be further appreciated that the principle components of the iSNPsolution 120 may differ somewhat between that used in the networkedstorage controller 108 and those used in the application server HBAs114. For example, the storage controller 108 may be configured toaccommodate higher bandwidth by providing an increased iSNP 122processor speed, additional memory 126, multiple controllers 132, and/orhigher capacity network interfaces 136. Furthermore, HBA-associatediSCSI hardware solutions may lack certain components that are notrequired in iSCSI communication such as the storage interface 132 if nostorage devices are directly interconnected to the associated device.

FIG. 3A illustrates another high level block diagram of the iSNPsolution 120 for providing iSCSI processing functionality. FIG. 3B is anabstract functional view of the same hardware, illustrating the flow ofinformation. In various embodiments, the iSCSI hardware solution 120 isdesirably implemented as an application-specific integrated circuit(ASIC) and may support a very long instruction word (VLIW) architecturefor one or more of the subcomponents contained therein.

Referring to FIG. 3A, the iSNP 122 includes a Protocol Intercept Engine(PIE) 142 subsystem, responsible for hardware acceleration of TCP/IP andiSCSI processing. The PIE subsystem 142 comprises principally of areceive (PIE-Rx) module 144, a transmit (PIE-Tx) module 146, and anacknowledgment /windowing/and retransmit (AWR) module 148. In oneaspect, the PIE subsystem 142 achieves a high level of computationalperformance through using one or more hardware accelerators to performtasks associated with TCP/IP and iSCSI processing. The PIE subsystem canbe employed independently of other iSNP components for otherapplications (besides iSCSI storage controller) that require high datarate hardware acceleration of TCP/IP, iSCSI, or similar protocols. Forexample, the PIE subsystem may be employed in networking securitysystems, web switches, fibre-channel over IP systems, and so on.

The PIE Subsystem 142 communicates with other components of the iSCSIhardware solution 120 through an internal system bus 150 as well asthrough dedicated queues. This interconnect may include a switch orother medium that could be used, based on the engineering requirementsof the system in which the PIE is deployed. The CPU Complex 124, may beformed as a collection of processors used for application processing.For example, the iSNP, as a storage controller, may perform storagemanagement tasks including handling of SCSI commands, managing a storagesystem cache, managing space on attached disks, failover and recoverytasks, managing data movement between disks and memory. In otherapplications, such as a network security system, the CPU complex may beused for performing security processing tasks.

An Input-Output (IO) interface 151 may also be logically associated withthe system bus 150 and provides functionality for interacting with thestorage device interface 132 (shown in FIG. 2). As previously described,the interface 132 may serve as a converter from a PCI-X bus type to aserial ATA bus type and may be used to provide communicationfunctionality between the storage blade 108 and the storage devices 110.In one aspect, the storage controller interface 151 facilitates serverblade communication through various bus standards including, forexample, PCI, ISA, and 3GIO.

In various embodiments, two or more iSNP solutions 120 may be desirablyinterconnected via a Reflective Memory Channel (RMC) to provide improvedhigh-availability capabilities, failover, load-balancing, and redundancyfeatures. Interconnection in this manner is accomplished through acoordinated system memory controller 152, reflective memory controller154, and a buffer memory controller 156 which are linked in a peer topeer manner between each interconnected iSNP solution 120. Togetherthese components 152, 154, 156 are responsible for communicating andcoordinating the activities of each hardware solution 120 with respectto one another, such that if one fails, the other can take over, thusproviding advanced error correction and data recovery functionality.Additional details regarding the functions of the coordinated systemmemory controller 152, reflective memory controller 154, and a buffermemory controller 156 will be described in greater detail hereinbelow.

A structured memory accelerator 158 may also be integrated into the iSNPsolution 120 to provide advanced queuing of messages between components.In one aspect, the structured memory accelerator 158 interacts with thesystem memory 126 to improve performance during enqueuing and dequeueingof information (in the form of descriptors or messages) between variousparts of the iSNP system. A desirable feature of the structured memoryaccelerator 158 is that it is capable of handling and managing a largenumber of queues simultaneously to enhance system performance. Thisfeature further provides the ability for components of the ISNP and PIEsystems, including processors in the CPU complex, to enqueue/dequeuemessages without excessive load penalties and thus enables the systemsto perform at high data rates. As previously indicated the PIE subsystem142 provides a number of significant features and functionalitiesrelated to the processing of TCP/IP and iSCSI traffic. The iSNP/PIEcomponents process and pass information through a layered networking andstorage networking stack wherein one or more of the following functionsare performed by the iSNP/PIE components in selected layers. In thesubsequent portions of the description, the basic units of informationassociated with each networking layer are defined as frames whenreferring to the Ethernet and IP layer, TCP segments when referring tothe TCP layer, and iSCSI PDU (protocol data unit) when referring to theiSCSI layer.

As shown in, FIG. 3B, incoming network data is received by the iSNPsolution 120 through the PIE-Rx 144. The PIE-Rx 144 is responsible forreceiving and decoding packetized information and distributing variousportions thereof to other components of the PIE and iSNP solution 120.In one aspect, the PIE-Rx 144 identifies appropriate header information,performs selected header processing tasks, and passes selected headerinformation to the AWR 148 wherein TCP protocol processing takes place.Likewise, the PIE-Rx 144 identifies appropriate header, commands, anddata descriptors in incoming packets to be passed to the CPU complex 124for processing with packetized data received by the PIE-Rx 144 passed toor deposited in the main memory component or appropriate region ofmemory.

In an analogous manner the PIE-Tx 146 is responsible for collectingpacketized outgoing network data to be transmitted to other systems,components, and/or devices. The PIE-Tx 146 receives data and descriptorsfrom the CPU complex 124 and the AWR 148, performs selected headerprocessing tasks, and determines the appropriate formatting and timingfor data distribution as will be described in greater detailhereinbelow.

FIGS. 4A-B provide an overview of storage networking and the iSCSIprotocol in the context of the iSNP solution 120. As shown in FIG. 4Athe layering of protocols for an iSCSI storage networking system isdescribed in terms of the Open System Interconnect (OSI) model 160.According to the model 160, storage networking and communicationgenerally follow a layered, or hierarchical approach wherein a pluralityof layers 161 exist to perform selected functions related to theprocessing of information.

The principal layers of the storage networking model 160 include a SCSIlayer 162, an iSCSI layer 164, a TCP layer 166, an IP layer 168, anEthernet layer 170, and a physical layer 172. The SCSI layer 162implements the SCSI command set wherein storage block data operations(e.g. input/output) to SCSI devices are performed and managed. The iSCSIlayer 164 is responsible for transmitting and receiving SCSI commandsover a TCP/IP-based network. In various embodiments, the iSCSI layer 164transports SCSI input/output (I/O) over an IP network through the use ofiSCSI protocol data units (PDUs), the composition of which isillustrated below in FIGS. 5A-G.

The TCP layer 166 serves as the principal end-to-end network protocoland is typically used for establishing a reliable (connection-oriented)session between sending and receiving devices. iSCSI PDUs, contained inTCP segments, are transmitted as TCP data (shown in FIGS. 5B, 5D). Theamount of data transmitted in a single TCP segment is generally limitedby the Maximum Segment Size (MSS) parameter and typically negotiated atconnection setup time between sender and receiver devices. The streamoriented nature of TCP results in iSCSI PDUs not necessarily starting atthe beginning of a TCP segment. Further, iSCSI PDUs may be larger orsmaller than the MSS for a selected connection and there may be one ormore PDUs within a TCP segment or a single iSCSI PDU that may spanseveral TCP segments. The TCP layer provides a mechanism to help aid inthe error-free reception of iSCSI PDUs by the receiving device in theorder (in the sequence) intended by the sender device. For example, areceiver may receive TCP segments out of sequence which may be correctedby the TCP layer by re-sequencing them before passing them to the iSCSIlayer.

The IP layer 168 serves as a connectionless service that is typicallyused to route data and information between network devices. Each IPframe (see FIG. 5C) comprises an IP packet header that includes thesource address, destination address, and other information as specifiedby the Internet Protocol. The IP layer 168 further uses IP frames totransport TCP segments from a sender to a receiver.

Occasionally, certain devices in a IP network may cause IP frames to bebroken up into smaller fragments in a phenomenon referred to as IPfragmentation. This may occur when the maximum transfer unit (MTU) ofthe device is smaller than the size of the IP frame it receives.Typically, TCP/IP protocols reduce the possibility of fragmentation bynegotiating MTUs appropriately. However, if IP fragmentation occurs, theIP layer 168 in the receiver should be capable of re-assembling IPfragments before passing them to the TCP layer 166.

The Ethernet layer 170 serves as the media access control (MAC) protocolhandler to transfer Ethernet frames across the physical link (e.g.physical network connection/layer). The format of the Ethernet frame isillustrated in FIG. 5D. In one aspect, each frame comprises a MACaddress that serves as a universally unique address that is pre-assignedfor each Ethernet MAC device.

The physical layer 172 defines physical medium itself (e.g. physicalcable or connection type) and provides the electrical and mechanicalmeans to maintain the physical link between systems.

From the perspective of the iSNP 120, SCSI layer 162 and part of iSCSIlayer processing 164 generally occur at the software level whereas partof iSCSI layer, TCP layer 166, IP layer 168, and Ethernet layer 170processing occur at a hardware accelerated level. In one aspect,hardware acceleration performed by the iSNP solution 120 desirablyimproves performance and provides a means to rapidly transmit storagedata and information in a more efficient manner as compared toconventional network storage solutions.

It will be appreciated that the aforementioned discussion of the networkstack 160 utilized by certain embodiments of the iSNP solution 120describes but a subset of the features and functionalities that may beassociated with iSNP operations affecting certain layers of the networkstack 160. The interoperation of these layers in addition to how dataand command units are formed, distributed, and interpreted will bedescribed in greater detail hereinbelow. It will be further appreciatedthat each of the various aforementioned communications layers may beexecuted in either in a hardware accelerated manner or through acomparable software implementation to provide the desired communicationsfunctionality.

FIG. 4B illustrates a high level model of iSNP information exchangebetween an initiator device 174 and a target device 176 in the contextof the aforementioned network stack 160. In one aspect, a SCSI writecommand is desirably encapsulated in a SCSI write PDU 178 that may betransmitted from the initiator 174 to the target 176. Upon receipt ofthe SCSI write PDU 178, the target 176 may respond with anacknowledgment signal comprising a ready to transmit (R2T) PDU 180. Theinformation contained in the R2T PDU serves as a signal to the initiator174 that the target 176 is ready to receive information and determineswhen the initiator 174 will commence with data transmission in the formof one or more data out PDUs 182. The behavior of reads as well as otheriSCSI commands is described more completely in the aforementioned iSCSIprotocol definition.

FIGS. 5A-G illustrate details of the composition of an exemplary iSCSIPDU including its format and header composition in addition to thecorresponding components of information related to the networking stack.As shown in FIG. 5A, an iSCSI PDU comprising a SCSI command in an iSCSI“wrapper” comprises a SCSI opcode, the Logical Unit Number (LUN)associated with the target, a Task Tag utilized by initiators andtargets to identify and associate responses and requests, an errorcorrection code or digest for the header and data, if present.

In one aspect, the composition of an iSCSI PDU may be further dividedinto a basic header segment (BHS), an optional additional header segment(AHS), an optional header digest (HD), an optional data segment (DS),and an optional data digest (DD). The digest portions of the iSCSI PDUprovide error-correction or data validation information to insure thecontent of various portions of the iSCSI PDU remain error free duringtransmission/reception. In general, the header segments provideinstructions and information that is interpreted to determine how thedata contained in the iSCSI PDU should be utilized. It will beappreciated that the structure and content of the iSCSI PDU as shown inFIG. 5A represents but examples of some of the functionalities andfeatures associated with the iSNP solution 120 and should not beconstrued as limiting as to the scope of the invention.

Similarly, FIG. 5B summarizes certain aspects of the format and headerinformation associated with an exemplary TCP Segment. The TCP Segmentincludes “source port” and “destination port” identifiers that are usedat the source and destination respectively to direct data to the processassociated with the port number. A “sequence number” comprises a 32-bitnumber and is used to indicate the position of the attached data in theTCP stream and may be used to send bytes of data to an application inthe correct sequence. In an exemplary connection process involvinginitiation of a TCP connection, each participant may identify a randomnumber to start with, notify the other participant of the number, andkeep track of the sequence number of the next expected segment. In thismanner, each participant may determine the order in which bytes are sentby the other and allows for the detection of dropped or duplicatesegments.

A “window size” parameter may be used for purposes of flow control whereeach participant indicates a number or quantity of bytes it can safelyreceive from another participant. Various “flags” may further be used bythe protocol to reset, synchronize, or end a session and to indicatewhen a packet is to be sent with high priority or on an urgent basis. A“checksum” value may also be used for error detection and informationvalidation. Finally, a data or payload component represents informationto be delivered from the sender to the receiver.

FIG. 5C summarizes some of the aspects of the format and headerinformation associated with an exemplary Internet Protocol (IP) frame. A“version” parameter indicates the version of the protocol is being used(e.g. ipv4 or ipv6). A “Type of service” parameter may be used toimplement various quality of service features. An “Identification”parameter represents a 16-bit number that, together with the sourceaddress, uniquely identifies a selected packet and may be used duringreassembly of IP fragments. One or more “Flag” parameters may further beused to indicate whether or not a packet may be fragmented by routers. A“Fragmentation Offset” parameter represents a byte count from the startof an original sent packet, set by a router which performs IP routerfragmentation. A “Time to Live” parameter denotes the number of routerhops after which a frame may be discarded, for example, because it isexcessively old or in a routing loop. A “Service Access Point” (SAP)parameter indicates the transport protocol associated with the frame(e.g. 1=ICMP; 2=IGMP; 6=TCP; 17=UDP). A Header Checksum parameter may beused to detect errors that may occur during transmission. A SourceAddress and Destination Address represent the IP addresses of the sourceand destination nodes. Finally, one or more “IP Options” parameters maybe used as mechanisms for control and debugging.

FIG. 5D summarizes some of the aspects of the format and headerinformation associated with an Ethernet frame. In various embodiments,one of two frame formats may be used and may include: (a) A standardframe format of the type issued in 1978 by Xerox Corporation, IntelCorporation and Digital Equipment Corporation, typically referred to asEthernet (or DIX Ethernet) or (b) An international frame formatcomplying with the IEEE 802.3 standard representing a more recentlydefined standard. These two standard frame formats may be distinguishedusing a “type” field present in the header that contains a protocol-typenumber for Ethernet and specifies the length of the data contained inthe frame for IEEE 802.3. Typically the maximum length for an Ethernetframe is 1526 bytes indicating that a data field may be a length of upto approximately 1500 bytes. Alternatively, the length of the 802.3 datafield may be limited to limited to approximately 1500 bytes, however,the system may be configured to support jumbo frames of up toapproximately 9000 bytes as permitted on modern 802.3 networks.

FIG. 5E illustrates an exemplary iSCSI command PDU segment 138 thatincorporates the header information for various layers of the networkstack 160. The packet header may be organized such that the headers areinterpreted according to the order of the stack 160. For example, theiSCSI command PDU segment 138 comprises an Ethernet header 234, an IPheader 236, an TCP header 238, and an iSCSI header 240 each of which arearranged substantially adjacent to one another. One or more of theheaders 234, 236, 238, 240 may further include checksum or errorcorrection information that may be used to verify the receivedinformation during the various stages of decoding and resolution toinsure integrity in the transfer of data and command information.

When processing of the iSCSI command PDU segment 138, the Ethernetheader 140 is first decoded/interpreted by the Ethernet layer 170 of thereceiving device which passes the remaining contents of the PDU to thenext higher layer which in the illustrated example is the IP layer 168.Subsequently, the IP header 236 is decoded/interpreted and the remainingcontents of the PDU passed to the next higher layer. The above-describedmanner of processing proceeds sequentially for each header portioncontinuing through the decoding of the iSCSI header 164. Thereafter, anunderlying SCSI command 242 is resolved and may be executed by thereceiving device to accomplish tasks associated with storage andretrieval of information.

FIG. 5F illustrates an exemplary iSCSI frame data PDU 244 containing adata or information segment 246 associated with the aforementioned iSCSIcommand header information. In one aspect, the data segment 246 ispreceded by the iSCSI command PDU segment 232 which carries thenecessary information for the data segment 246 to be interpreted by thereceiving device. One desirable benefit of the storage network of thepresent teachings' is that relatively large data frames are supportedwhich may be useful in improving data transmission efficiency betweendevices. Additionally, only a single iSCSI command PDU segment 232 needbe associated with the data segment 246 therefore reducing the amount ofinformation which should be transmitted between devices and reducing theamount of computation involved in processing header information. In theillustrated example, a data segment 246 of 2048 words or 8192 bytes isshown however, it will be appreciated that other data segment sizes canbe readily supported.

FIG. 5G illustrates an exemplary iSCSI frame data PDU 248 comprising aplurality of sub-segments each of which are associated with an initialiSCSI command PDU segment 232. In the exemplary iSCSI standard framedata PDU 248, each sub-segment comprises separate header information 254which is transmitted with the sub-segments 252. During the receipt anddecoding of the iSCSI frame data PDU 248 each of the sub-segments arere-associated to join the information stored therein. The use ofseparate header information 254 in the aforementioned manner allowssmaller frame sizes to be transmitted which may be re-associated andprovides a means to recover or retransmit smaller portions of data ascompared to the iSCSI frame PDU 244.

FIG. 6 illustrates a block diagram of the principal functionalcomponents 300 of the Protocol Intercept Engine that provide foracceleration of TCP/IP and iSCSI network information processing for highdata rate applications. As illustrated the principal functionalcomponents of the PIE architecture include a header processing component310, a protocol processing component 315, and a data movement component320.

The header processing component 310 may be further characterized byfunctionalities that may include an incoming packet parsingfunctionality 330, an incoming packet validation functionality 335, anda header creation functionality 340. The incoming packet parsingfunctionality 335 comprises parsing incoming packets at the MAC 170, IP168, TCP 166, and iSCSI layers 164 to demarcate headers, data, PDUs, andextracting certain relevant pieces of information from the packetheaders. The incoming packet validation functionality 335 comprisesperforming operations associated with validating incoming packets byverifying the correctness of checksums, CRCs, data digests and otherfields. The header creation functionality 340 comprises creating headersfor outgoing packets that may be recognized by other devicesand/components.

The protocol processing component 315 may be further characterized byoperations that a sender or receiver participating in a protocol isrequired to perform. For TCP procotol processing, these operations mayinclude: ack generation 342, window management 344, timer management 346and retransmission 348 as well as other operations directed towardsconnection setup and teardown, flow control, error recovery, andcongestion management. Additional details of the protocol processingcomponent 315 and its associated functionalities will be described ingreater detail hereinbelow.

The data movement component 320 may be further characterized byfunctionalities that may include incoming data movement operations 355and outgoing data movement operations 360. Incoming data movementoperations 355 relate to the moving of the data contents of packets toappropriate destination buffers and application memory whereas outgoingdata movement operations 360 relate to the aggregations of the data asdescribed or required by an upper layer protocol or an application andpreparing or enabling it to be transmitted.

A distinguishing characteristic of the present teachings over that ofthe prior art is that commercial general purpose processors are unableto perform all three of the above-indicated functionalities at datarates that are allow for high speed data transmission (e.g. at or nearfull line speed for 10 Gbit/sec networks at the current time). The PIEarchitecture of the present teachings desirably overcomes thislimitation by employing specialized hardware accelerators that containdedicated logic to perform these operations at very high data rates thusimproving overall performance of the iSNP 120 over conventional networkcommunication devices. More specifically with regard to TCP/IP networkcommunication, the PIE architecture accelerates header processing 310,protocol processing 315, and data movement 320 for the TCP/IP protocolsuch that very high data rates can be effectively and efficientlyhandled. As a result, data rates of 10 Gbits/sec or more are achievablewith even higher data rates possible applying substantially similarmethods and components.

In certain embodiments, for iSCSI layer 164 processing, the PIEarchitecture may be configured to perform accelerated header processing310, TCP protocol processing, and data movement 320. iSCSI protocolprocessing 315, which is not typically computationally intensive, beingperformed in software on a general purpose processor. Typically, the PIEarchitecture is configured to perform some or all processing at a highrate of speed such that the iSNP 120 can handle incoming and outgoingtraffic at or near a targeted line rate (e.g. 10 Gbits/sec) on asubstantially continuous basis. To accomplish the high rate ofthroughput, the PIE architecture is configured for pipelined processingof packets to improve overall efficiency and to eliminate or reducestalls.

In conventional network processing scenarios, problems frequently arisein a pipeline when certain data or pieces of information are not bereadily accessible or available at the time they are needed by thepipeline or when computations take longer as a result of an exceptionalcondition. These problems contribute to an overall slowdown of theprocessing pipeline and lead to undesirable data transmission/processingstalls that markedly reduce performance. The PIE system and architectureof the present teachings overcomes many of these issues and limitationsby implementing discrete processing paths wherein each processing pathis directed towards handling network traffic and data of a particularcomposition. In various embodiments, each processing path is optimizedto manage a selected network traffic composition and addresses certainissues and problems associated with the selected network trafficcomposition in order to achieve improved overall information handling.

FIG. 6B illustrates a block diagram of processing functionalities of thePIE architecture 365 associated with processing paths comprising: a Realor Near-Real Time (RT) path 370, a Non-Real Time (NRT) path 375, and aManagement (PIEMan) path 380. The RT path is also sometimes referred toas “fast path”. The NRT and PIEMan paths are collectively referred to as“slow path”. It will be appreciated that the TCP/IP protocol stack isfairly large and complex and a software implementation for accomplishingnetwork processing may give rise to an application having approximately20,000 lines of -code or more. A further consequence of this complexityis that implementing the entire protocol stack using special-purposehardware component is generally neither practical nor efficient. Thepresent teachings, address this potential limitation by making use ofthe fact that most network data transfers occur in a “common case”during steady-state operation of a TCP connection. In such a scenario,significantly similar computations are typically performed on most (avery large fraction of) packets and hence a significant benefit can beobtained by implementing a hardware acceleration solution for the commoncase network traffic.

Based on this approach the RT path 370 may be directed towardsprocessing common case network traffic in a hardware-accelerated mannerto achieve maximum throughput. According to certain embodiments of thepresent teachings, the RT path 370 comprises a fullyhardware-accelerated solution wherein the majority or substantially allof the common case network traffic is processed along the RT path 370.

The NRT path 375, comprises a software-based computational solution thatmay be executed on one or more general purpose processors and mayfurther be coupled to certain acceleration mechanisms as will bedescribed in greater detail hereinbelow. According to certainembodiments of the present teachings, this path 375 may be used fornetwork traffic cases that are less frequently encountered than thecommon case network traffic. Typically, there is the potential for alarge number of different variations of infrequent case network trafficand hence it is not practical to implement a hardware solutioncorresponding to each infrequent case (although it may be theoreticallypossible to do so). Additionally, the overall impact on throughput ofsuch infrequent cases is minimal when the common cases are performed ina hardware-accelerated manner and therefore it is not generallynecessary to accelerate these computations.

The PIEMan path 380 represents another software-based computationalapproach akin to the NRT path 375. Typically, acceleration along thispath 380 is not necessary (although it is theoretically possible to doso) as the network traffic that proceeds along this path is veryinfrequent in nature as compared to the common case. In general, thePIEMAN path 380 addresses specialized network traffic cases and managesaspects of the IP and TCP protocols as will be described in greaterdetail hereinbelow.

FIG. 6C illustrates a block diagram of PIE processing and accelerationpaths 385 as they relate to the iSNP solution 120. One of the principlefunctions of the PIE 142 is to receive and categorize network/storagetraffic using one or more hardware state machines 387. In the instanceof TCP/IP network traffic, IP header processing 388 and TCP headerprocessing 389 take place in the hardware state machines 387 and isclassified into Real Time (RT) 375, Non-Real Time (NRT) 370, andPIE-Management (PIEMan) 380 paths as previously indicated and shown.

Information used in subsequent stages of processing is extracted fromincoming frames and forwarded to appropriate blocks or componentsaccording to the path 370, 375, 380 through which the information willproceed. For example, network/storage traffic that is amenable tohardware processing in the Real Time Path 375 may be processed in themanner shown. Alternatively, network/storage traffic that proceedsthrough the Non-Real Time path 370 including out-of-sequence TCPsegments, TCP connection setup and teardown related segments, and otherTCP infrequent and exception cases (e.g. information associated with TCPoptions) may be processed in the alternate illustrated softwareaccelerated path. Finally, IP frames that are fragmented, are IP-layermanagement protocol frames, or do not belong to the principal protocolstargeted by PIE, are processed in the PIE-Management path 380.

A principal advantage conferred by the present teachings in using theselective data path approach according to the PIE architecture is thatthe RT path can process the majority of network traffic at very highdata rates and in real-time or near real-time. Furthermore, the PIEarchitecture provides a means to process traffic in a pipelined mannerwithout undue stalls or substantial delays that might otherwise impedethe overall performance of network traffic processing. For framesentering the hardware-accelerated real-time path, the worst-caseframe-sizes (generally being the smallest frame sizes) may generally behandled without inserting any “bubbles” or pauses in the pipeline.

In various embodiments, the hardware acceleration mechanisms, which mayinclude the use of very long instruction word (VLIW) processors 387 andhardware finite state machines (FSM) 389, represent a convenient andefficient means to enable the real time processing capability foriSCSI/TCP/IP/GbE packet reception, classification, protocol processing,and data transmission. As will be appreciated by those of skill in theart, real-time or near real-time packet header processing and protocolprocessing in the aforementioned manner represents significantadvancement in high bandwidth networking and networked storageapplications.

The use of very long instruction word (VLIW) processors 387 furtherprovides an efficient and rapid computational means for TCP Protocolprocessing using VLIW commands processed by the AWR 146 as will bedescribed in greater detail hereinbelow. Briefly described, the use ofsoftware running on VLIW processors 387 impart a significant degree offlexibility beyond that of using exclusively hardwired state machines387. One rationale for the improvement in flexibility is that theseinstructions may be reconfigured such that the AWR module 148 can bemade to implement a variety of algorithms and parameters that can beused in TCP and similar transport protocols.

Another desirable feature associated with the aforementionedarchitecture is that a zero-copy buffering approach may be implementedimproving processing performance and characteristics ranging from thenetwork receive interface to application data buffers. In one aspect,end to end zero-copy buffering capabilities describe a manner of storinginformation in memory such that the information received from theEthernet MAC layer interface 136 from another network device orcomponent may be stored directly into the final main memory region orarea designed by the application (for example, the storage controllerapplication) without intermediate buffering and copying in main memory.Zero-copy buffering in this manner improves performance by reducing theamount of main memory and system bandwidth required and provides a meansfor improved information processing and retrieval as will be describedin greater detail herein below.

Referring again to FIG. 6C, when processing incoming frames, the PIEfirst parses and processes the frames using hardware implemented parserswithin the PIE-Rx block 144 (shown in FIG. 3B). The parser functionalityverifies the correctness of various headers, checksums, etc. andextracts relevant information from the frames. The parser resultsfurther indicate whether a selected frame should be processed in the RTpath 375, the NRT path 370, or the PIEMan path 380.

Information processed in the RT path 375 typically comprises the type ofcomputing involved during the data movement indicative of a steady stateTCP connection. The header processing aspects of RT path 370 include allparsing, classification, and extraction of relevant information at IP,TCP, and iSCSI layers for incoming data using hardware finite statemachines 389. For outgoing data, packet headers may be composed andoutgoing data may be assembled using hardware finite state machines 389as well. The protocol processing aspects of the RT path 375 includegenerating acknowledgement packets, managing window sizes for TCPflow-control and congestion control, and retransmission (if necessary)using hardware accelerators including VLIW processors 387. Data movementfrom the network interface to main memory and vice versa may also behandled by hardware DMA engines.

Information processed in the NRT path 380 typically comprises slower andinfrequent parts of TCP protocol processing. This type of protocolprocessing may include re-sequencing of TCP segments that arriveout-of-sequence, TCP connection setup and teardown processing, and TCPoptions processing. In terms of header processing, the NRT path framesmay be processed using hardware FSMs 389 that perform IP and TCP headerprocessing. Subsequently, TCP protocol processing may be performed insoftware on a general purpose processor, referred to as a NRT processor390 (present in the AWR block).

If a frame contains an out-of-sequence TCP segment, the softwareprocessing functionality of the NRT path 270 may buffer the frame untilprevious frames in the sequence arrive. Subsequently, the frames may bere-sequenced and passed to an NRT iSCSI PDU Engine 392 for headerprocessing. The NRT processor 390 and NRT iSCSI PDU engine 392 possess anumber of accelerators that may share commonality with the RT Path 375.As a result, after re-sequencing and iSCSI header processing, the TCPsegment may be returned 394 to the RT Path 375 for further processing ina hardware accelerated manner.

If a frame corresponds to selected TCP protocol exception cases,including connection setup and teardown or TCP options being present,the frames may be processed in software on the NRT processor 390. Incertain instances, such as when a frame contains an in-sequence TCPsegment but also contains one or more TCP options, the processingassociated with TCP options may be directed to the NRT path 370.Generally, however, normal processing associated with in-sequence TCPsegments is conducted within the RT path 375 to improve overallperformance.

In certain instances, as a result of IP-level analysis, it may bedetermined that a selected frame is a non-IP frame, an IP-layerexception case (e.g. an unknown upper layer protocol, an IP fragment, anIP options frame), or an IP-layer management protocol frame (e.g. ARP,ICMP, RIP, OSPF). Frames of these types may be categorized as PIE-Manframes for processing in software on a general purpose processor 394 inthe PIEMan Path 380. Typically, these frames do not occur with highfrequency and hence, their handling need not necessarily be acceleratedas overall performance will generally not be significantly affected bythese frames.

In certain embodiments, somewhat different criteria for categorizingframes may be implemented, depending on the application. In general, thePIE parses the frames so as to quickly, identify frames that meetcertain pre-defined criteria which can be taken out of the RT path 375to help insure that overall processing can proceed at a maximal oroptimal rate without being hindered by non-common case frames.

When any creates a new frame to be transmitted 398, it may be configuredto pass descriptor information to the PIE-Tx subsystem 144, whichcompletes the task. If the PIEMan path 380 encounters a set of IPfragments, it may be configured to re-assemble them into anon-fragmented IP frame and analyze the TCP headers in the frame.Subsequently, the frame may be transferred to the NRT path 370 if theframe possesses suitable criteria or properties.

FIG. 7 illustrates an exemplary flow diagram for network data pathcontrol and resolution 400. In state 405, incoming data or frames arereceived by the PIE-Rx 144 and are evaluated in state 410 to determinewhether or not they correspond to an iSCSI frame type. If the frame isdetermined to be a non-iSCSI frame then the data or frame is saved tobuffer memory 415 and is subsequently passed to dedicated networkinformation processors designed to manage non-iSCSI traffic.

If the frame is determined to be an iSCSI frame, a separate set ofoperations is performed which determine the manner of processing thatmay be used in conjunction with the incoming iSCSI traffic. To improveprocessing speed and throughput it is generally desirably to route iSCSItraffic through the aforementioned real-time path 375 (e.g. fast path).The real-time processing mode desirably implements a dedicated hardwareresolution schema that processes a majority of common case iSCSItraffic. In one aspect, real-time processing in this mannersubstantially accelerates processing of iSCSI traffic and improvesperformance, especially in high bandwidth/high demand storageenvironments. Any iSCSI traffic which is not amenable to real-timeprocessing may be routed through the aforementioned non-real-time path370 to facilitate resolution of the iSCSI traffic. The non-real-timeprocessing mode 370 may be implemented in hardware in dedicatedprocessors that are distinct from the fast path dedicated processors, ormay be implemented on the same dedicated processors used for real-timeprocessing, using additional logic.

Upon determination that an iSCSI frame has been received in state 410, aheader check/data digest check may be performed in state 420. This checkmay be used to validate the contents of the iSCSI frame and used toinsure data integrity and consistency in the incoming iSCSI traffic.Subsequently, in state 425 a Protocol Data Unit (PDU) resolutionoperation is performed wherein the information contained in the iSCSIframe is identified and evaluated to determine the subsequent manner ofprocessing that is to be desirably used in conjunction with the contentsof the iSCSI frame. If the iSCSI frame is determined to containinformation relating to a target mode data out PDU or an initiator modedata in PDU in state 430 then the information contained in the header ofthe iSCSI frame is saved to a iSCSI Rx queue and the data contained inthe iSCSI frame is saved to a SCSI data cache in state 435.Alternatively, if the frame comprises another type of iSCSI PDU then theheader and data information of the PDU are saved to the iSCSI Rx queuein state 440.

In state 445, a determination is made as to whether the incoming data isamenable to real-time processing. In one aspect, iSCSI data that isreceived in sequence and free of errors may be routed through thereal-time processing mode in state 450. Otherwise, if the iSCSI data isdetermined not to be amenable to processing via the real-time processingmode then the iSCSI data may be routed through the real-time processingmode in state 455. As will be described in greater detail, real-timeprocessing may desirably comprise saving iSCSI data directly to thefinal destination with zero memory copy, with Transmission ControlProtocol (TCP) flow management information passed directly to a flowcontrol module. In the non-real time processing mode, iSCSI data whichmay include fragmented or out-of-sequence iSCSI data may be saved tobuffer memory and subsequently passed to one or more dedicatedprocessors for reassembly and/or resequencing and flow control.Processed iSCSI data may then be returned to the iSCSI Rx queue and SCSIdata cache area and the buffer memory area occupied by the iSCSI datareleased back into a free pool.

FIG. 8A illustrates a block diagram detailing the PIE-Tx data pathcontrol and resolution functions 460 of the storage architecture foriSCSI processing. In one aspect, two types of transmit queues 465 aresupported comprising an iSCSI transmit queue 470 used to specify iSCSIPDUs and a raw transmit queue 475 used to point to non-iSCSI frames.Each queue may support one or more connections using fully configurableport priorities. The PIE-Tx data path control and resolution functions460 may further be used to fulfill iSCSI transmit requests wherein PDUsare specified in an iSCSI Tx queue with transmission managed by flowcontrol functionality within the storage architecture. Additionally,these functions 460 may support the creation of iSCSI header and datadigest information for selected PDUs, frames, or chunks, as well as TCPchecksum generation to help insure data integrity across the storagenetwork.

Flow control and error recovery may be desirably managed using a Txwindow model wherein sliding window management provides end-to-end flowcontrol. Using this model, transmit requests may be created as well asEthernet, IP and TCP headers for the Tx path. In one aspect, the Txwindow model may be used to maintain information detailingunacknowledged transmissions and moderate subsequent transmissionsallowing new transmissions up to the remaining Tx window's size. The Txwindow model may further provide retransmission timers forunacknowledged transmissions thereby providing a mechanism for timeoutretransmission of missing data segments or frames.

In one aspect, the Tx window model provides fast retransmit and recoveryfunctionality by detecting out-of-order segments or frames andsubsequently returning a duplicate acknowledgement signal (ACK) to thesender. Upon receiving one or more duplicate ACKs, the sender may beconfigured to recognize that the indicated data segment or frame may belost and retransmit the appropriate data thereby avoiding timeouts indata transmission. This manner of processing may be used to desirablyimprove the performance of the system and reduce dead time.

Round trip time (RTT) estimation may also be incorporated into the flowcontrol and error recovery mechanisms to help improve networkperformance. In one aspect, an RTT may be calculated as a weightedaverage or RTT variance by evaluating one or more round trip datatransmission samples and calculating the elapsed time between thetransmission of each segment or frame and receipt or arrival of thecorresponding ACK. Using the calculated RTT information and estimates,retransmission timeout values may be adjusted to adapt the transmissioncharacteristics to a variety of network conditions.

As shown in FIG. 8B, the congestion management functionality 480 of thePIE architecture may comprise several approaches to reducing networkcongestion and traffic overload. For example, the congestion managementfunctionality 480 may comprise implementation of a multiplicativedecrease approach 485 wherein a congestion window is maintained whichlimits the Tx window size. Upon loss of a data segment or frame, thecongestion window may be reduced in size, for example, approximatelyhalved, and the timeout value for the retransmission timer increased,for example approximately exponentially increased. This manner ofprocessing provides a rapid and significant reduction in traffic therebyproviding a means to allow congestion to be resolved in a timely mannerwithout undo performance penalties.

Another congestion management functionality 480 may compriseimplementation of an additive increase or slow start approach 490. Usingthis approach 490, when initiating a TCP connection or increasing therate or amount of traffic following data congestion, a congestion windowmay be resized to accommodate increased amounts of traffic. In oneaspect, resizing of the congestion window comprises increasing thecongestion windows size by one segment or frame for each ACK received.This manner of congestion management limits initial data transmissionsuntil ACK latencies can be evaluated

A further congestion management functionality 480 may compriseimplementation of a congestion avoidance approach 495 wherein when thecongestion window reaches approximately half of its originalpre-congestion size, the congestion window is resized by approximatelyone segment or frame size when one or more segments or frames have beenacknowledged. In one aspect, this manner of congestion managementprovides a means to slow down the rate of increasing congestion therebyavoiding recongesting the network.

FIG. 9 illustrates a functional diagram of some of the principalcomponents of the PIE 142 that provide for acceleration of data storageand retrieval requests. As previously indicated, a principal feature ofthe PIE 142 is to offload protocol processing from a software-boundenvironment and to provide an improved hardware functionality for iSCSIdata resolution. In the illustration, greyed elements 496 may becontained within system memory and hatched elements 497 may be containedwithin cache memory (e.g. L2 cache). Additionally, ellipses areindicative of queue data structures 498 and rounded rectangles areindicative of tables or other data structures 499.

The PIE Rx 148, PIE Tx 144, and AWR 146 modules represent hardwaresolutions for performing the functions associated with theaforementioned architectural functionality's. More specifically, the PIERx 148 principally performs functions associated with receiver data pathcontrol and processing, the PIE Tx 148 principally performs functionsassociated with transmitter data path control and processing, and theAWR 146 principally performs functions associated with flow control anderror recovery. Additionally, these components 144, 146, 148 maycoordinate their activities and communicate in such a manner so as toprovide for congestion management, window avoidance, and activitymonitoring functionality's. A further component of the PIE 142 mayinclude a PIE manager hardware component or ARC (PIE Manager processor)500. In one aspect, the PIEMan processor 500 serves to handle non-iSCSItraffic that has been identified by other components of the networkstorage system.

As previously noted, the PIE-Rx pipeline 148 (shown in FIG. 3A) providesan efficient receive interface for high-bandwidth hardware acceleratedpacket processing at the Ethernet, IP, TCP, and application layers.Hardware acceleration of network communications including TCP/IP-overEthernet and iSCSI network storage data are principal applications ofthe system, however, it will be appreciated that the accelerationmethods may be applied to other communications protocols as well. Invarious embodiments, the methods described herein are applicable tosystems and devices including by way of example: network adapters incomputer systems, storage platforms, and various networking systems thatprocess TCP/IP traffic. Implementation of the PIE-Rx 148 and othersystem components enables acceleration of TCP/IP packet processing aloneas well as acceleration of iSCSI processing along with TCP/IP processingin an integrated solution.

Hardware acceleration of routine traffic or common cases in packetprocessing by the PIE-Rx 148 represents an efficient means by which togain a substantial performance increase over conventional systems whileat the same time reducing the complexity and inherent problems that mayarise when attempting to provide a hardware-accelerated solution for allpossible types or circumstances of network traffic. As will beappreciated by those of skill in the art it is neither practical norefficient to employ dedicated hardware acceleration for all aspects ofTCP/IP and iSCSI protocols at the commercial level. As such, in thefollowing discussion, the common case hardware-accelerated path isreferred to as the Real-Time Path (RT Path or fast-path) and representsthe path through which the majority of network traffic proceeds duringroutine operation. Non-accelerated or partially-accelerated aspects ofnetwork traffic processing are likewise handled in a Non-Real Time Path(NRT Path or slow-path) resolution scheme that is expected to handle asignificantly smaller fraction of the overall quantity of networktraffic and is principally directed towards dealing with network trafficthat does not conform to the common case.

FIG. 10 is a block diagram that summarizes the principal functionalities510 of the PIE-Rx 148. A more detailed description of each of thesefunctionalities 510, as well as the underlying components of the PIE 142that may be used to achieve these functionalities 510 will be describedin greater detail hereinbelow. The PIE-Rx 148 serves as a logicalgateway for routing of network traffic to achieve improved performancewhich commences in stage 520 with the reception of network packetsarriving on incoming network ports. As previously indicated, the PIE-Rx148 may be configured to handle incoming traffic from a plurality ofports and may further process multiple different types of networktraffic relating to one or more different protocols.

In stage 525, the PIE-Rx 148 performs operations directed towardsprocessing of the received packets. These operations may furthercomprise de-encapsulation of packetized information, packet/datavalidation using data digests, packet classification, and incomingpacket parsing at the Internet Protocol (IP), TCP, and iSCSI levels. Instage 535, the PIE-Rx 148 may identify header and control informationwithin the incoming packets and pass the appropriate components to othersubsystems for related processing. In state 540, the PIE-Rx 148 performsa routing determination wherein a decision is made as to whether apacket will be processed by the RT, NRT, or PIEMan path. At least aportion of this determination may be predicated upon identifying thepacket composition and the nature of the incoming packet stream. Commoncase packets received in-order and free from error are desirably routedthrough the RT path hardware accelerated path to insure improvedprocessing efficiency and speed. Alternatively, non-common case packetsincluding packets received with errors or out-of-order are routedthrough a suitable NRT path mechanism to properly handle the packets. Instage 530, the PIE-Rx 148 may identify data containing within theincoming packets and write this data to a selected memorylocation/region designated by an associated application. In stage 545,the PIE-Rx 148 performs a specific identification of the nature of theerroneous or incomplete packets and determines the appropriate action totake including routing of the non-common case packets to a suitablepacket resolution mechanism.

A brief synopsis of some of the salient capabilities of the PIE-Rx 148include:

The PIE-Rx possesses the ability to operate at or near full line rate.This implies that network communications including network storagerequests and information transmissions may proceed at or near themaximum bandwidth or speed of the transmission line without significantbottlenecking arising during packet resolution at a source ordestination device. Current embodiments of the system can bedemonstrated to operate with approximately a 10 Gb per second aggregateline rate with efficient processing at higher line rates readilypossible. Thus the system and methods of the present teachings are wellsuited to improve performance in current networking implementations aswell as being able to accommodate future implementations.

The PIE-Rx 148 can be used both as a TCP/IP-offload engine and aniSCSI-over-TCP/IP offload engine. This implies that the PIE-Rx 148 isnot limited exclusively to improving performance in the context ofnetwork storage communications but may also be utilized during routinenetwork communications in a non-network storage context. Consequently,the PIE-Rx 148 may be adapted for use with a wide variety of networkingprotocols to improve communications in many contexts.

The PIE-Rx 148 improves performance through “Zero Copy” transfer ofdata. This implies that data contained in network packets may be writtendirectly to its final destination in memory as indicated by applicationlayer software, for example storage subsystem software, withoutrequiring the use of intermediate memory buffers for re-assembly,re-sequencing, error-checking, etc. In one aspect, avoiding the use ofintermediate memory buffers desirably limits performance penaltiesincurred as a result of multiple memory access, copying, and transferoperations using a more streamlined approach in which the finaldestination for the data is identified and written to in a singularoperation. This capability is significant to performance andcost-effectiveness in high throughput systems wherein by way of examplea “One Copy” data path would require twice as much buffer memorybandwidth and which would typically require twice as many pins andmemory arrays to achieve the same end-result as the “Zero Copy”solution.

FIG. 11 illustrates a detailed block diagram 600 of the principalcomponents of the PIE-Rx pipeline 148 used to achieve the aforementionedcapabilities and benefits. A TGI-Rx component 605 represents the receiveinterface for incoming network traffic. The TGI-Rx component 605operates by acquiring network traffic and forwarding the information toother components of the PIE-Rx 148. The TGI-Rx component 605 may furtherbe configured to support one or more network protocol interfacesincluding for example a 10 Gbit/sec Ethernet interface or a plurality of1 Gbit/sec Ethernet interfaces. In various embodiments, the networktraffic represents a time-multiplexed stream of data from one or morenetwork ports. It will be appreciated that the methods described hereinare suitable for other types of network protocol interfaces and maysupport higher or lower bandwidths.

Information received by the TGI-Rx component 605 is typicallyreformatted and processed by a Pre-Classifier component 610 whichpartially validates and pre-classifies packets for easier handlingdownstream. The Pre-Classifier component 610 may perform a packet headeralignment function to improve downstream informational processing byalleviating the need for subsequent components from having to parse thepackets multiple times. Furthermore, the packet header alignmentfunctionality facilitates various downstream components ability tolocate specific information at selected locations in the data stream. Inone aspect, the Pre-Classifier component 610 re-formats each Ethernetframe and attaches a TGI Tag and a TGI Offset to each double-word ofdata that it forwards to other components of the PIE-Rx 148.

A parser component 615 then receives the re-formatted, time multiplexedframes from the TGI-Rx component 605 and parses them to extract selectedinformation from the packet headers. The parser 615 is responsible formaking the determination as to whether a selected frame will beprocessed by the “fast path” or the “slow path” based upon the type offrame received. In one aspect, the parser 615 operates in connectionwith a Content Addressable Memory (CAM) component 620 to determine ifthe frame is part of an active TCP connection with the informationrelating to this determination passed to later pipeline stages.

An ingress buffer 625 represents a buffer for incoming packet streamspassed from the parser 615. In one aspect, data is stored in the ingressbuffer 625 using a FIFO queue for each network port related to thesystem. Data that is accessed from the ingress buffer 625, it istypically written directly to a region of memory designated by theapplication software. For such a configuration to operate efficientlyand to avoid application data from becoming corrupted, packets may bevalidated prior to being written to the designated memory region. Tothis end, each FIFO queue may be configured to buffer a complete packet.In one aspect, the PIE-Rx pipeline may be configured to support packetsizes of varying lengths including relatively large Ethernet packets(jumbo packets) of up to 9016 bytes or more. Operating at or near fullline rate, may further be accomplished by providing approximately 12%additional storage in each FIFO queue.

A dispatcher component 630 accesses data and information from theingress buffer 625 and is responsible for sending relevant controlinformation and data to various processing subsystems, based oninformation extracted by the parser 615. For in-sequence TCP segmentscontaining iSCSI frames (e.g. common case information), the TCP payloadis forwarded to an iSCSI PDU engine 640 for further processing (e.g. RTpath processing). In one aspect, the iSCSI PDU engine 640 receives theTCP payload from the dispatcher 630 and performs selected iSCSI-layerprocessing operations. These operations may include the demarcation ofiSCSI PDUs, headers, and data segments. Furthermore, the iSCSI PDUengine 640 may determine the type of each iSCSI PDU and direct iSCSIheader and data to destination queues and buffers in the storagesubsystem.

For out-of-sequence TCP segments, header information is sent to a NRTpath processor 645 and data is directed to a region of memory designatedas “Rx Chunks” (not shown). For non-IP-fragmented TCP frames, a messagemay be enqueued to a AWR subsystem 650 that performs TCP protocolprocessing including acknowledgement, windowing, and retransmission.IP-fragmented and other exception packets are directed to a PIEManprocessor 655 for processing in software.

In one aspect, the TGI-Rx 605 operates in multiple selectable modes. Forexample, the TGI-Rx 605 may operate in a 10 Gb Ethernet (XGE) mode,representative of a single 10 Gbits/sec Ethernet port utilizing a singlepre-classifier 610. Additionally, the TGI-Rx 605 may be configured tooperate in a 1 Gb Ethernet (OGE) mode wherein the TGI-Rx 605 comprisesup to eight discrete 1 Gbit/sec network interfaces and associatedpre-classifiers 610.

The TGI-Rx 605 generally transfers data to the parser 615 onedouble-word (64 bits) at a time. In OGE mode, data from the eight portsmay be multiplexed onto the link to the parser 615. The integratedpacket pre-classifier(s) 610 integrated with the TGI-Rx 605 operate togenerate tags and offsets for each individual double-word to indicatethe particular contents, as shown by way of example in FIGS. 12A-B. ForIP frames, each pre-classifier 610 may be configured to reformat thedata such that the IP header starts at the 17^(th) byte (byte 0x10) inthe frame. A VLAN tag, if present, resides in the 16^(th) byte (byte0xf). The presence of 802.3 rfc1042 formatting (length plus LLC/SNAPpattern 0xaaaa03_(—)000000 after MAC addresses) may be indicated by aspecial tag value. Finally, the TGI-Rx 605 pads the last dword of aframe with an end of frame (EOF) dword.

In various embodiments, a tag may be used to indicate whether a selectedframe is good or bad. When the tag is good, the EOF data dword may beconfigured as follows:

-   -   1) The length of the formatted frame may be specified (in bytes,        starting with the MAC destination address);    -   2) The TCP/UDP checksum may be specified (if applicable) (Note:        for unfragmented TCP/UDP frames, the checksum may include        coverage of the SIP, DIP, protocol, and segment/datagram length        pseudo header. For IP fragment 0 frames, the length field of the        pseudo header may be set to zero indicating it is unknown.);    -   and    -   3) The TGI-Rx may be configured to remove pad bytes prior to the        EOF dword.

As data is received from the TGI-Rx 605, it is examined by the parser610 to determine how to process each frame. In OGE mode, the parser 610processes a multiplexed data stream collected from each network port.The parser 610 may be implemented as a single state machine, time-sharedbetween data from distinct ports which maintains one context registerper network port.

An exemplary illustration of the context maintained by the parser foreach network port is shown in FIG. 13A. When the parser 610 receives adouble-word corresponding to port “N”, it loads the context register“N”, processes the data, and stores the context register “N” back to aregister file. The state field 805 describes the current state of theparser 610 for each network port wherein the parser finite-state-machine800 may be configured with a plurality of states. The ts_offst field 810indicates if a timestamp TCP option is present and if present, theoffset at which it occurs in the TCP header. The parser 610 checks theTCP options to see if any options other than the timestamp option arepresent. Generally, a timestamp option may be present if (a) the TCPheader length is a specified length (e.g. 8 words including a 5-wordheader plus 3-word option) and (b) the TCP option begins with aspecified value (e.g. a timestamp value of 0x080a, a NOP/timestamp valueof 0x01080a, or 2 NOPs/timestamp value of 0x0101080a). An option otherthan a timestamp value may be present if the TCP header is of aspecified length (for example greater than 5 but is not equal to 8 or ifthe above option check fails). If a timestamp is present, the parser 610may be configured to set the ts_offst field 810 to the appropriatenonzero value shown in FIG. 13A. In one aspect, if an option begins with0x080a it may end with 0x0000 (two end of option bytes), or if theoption begins with 0x01080a it may end with 0x00 (one end of optionbyte), however NOPs may also be accepted. The t_left field 815 indicatesthat the TCP header starts in the left half of the double-word. This mayhappen when IP options exist and occupy an odd number of words. Thereason field 820 may be used to indicate the reason that a frame can notbe processed by the RT path. When 0, RT processing is possible; for allother values, the frame should be processed in one of the slow paths—NRTor PIEMan. The reasons are listed in FIG. 13B. In certain embodiments,reasons b, c and d are not determined by the parser 610, but may insteadbe determined by the dispatcher 630 in a subsequent stage of the PIE-Rxpipeline 148 wherein the dispatcher 630 maintains knowledge of each TCPsession state, including sequence numbers. The remaining fields shown inFIG. 13A including Msw_par, d_left, d_data, and d_par constituteintermediate states that may be maintained by the parser f605 or eachpacket stream as it switches between packet streams.

In various embodiments, the parser 615 utilizes the uses the CAM 620 todetermine if a selected frame belongs to an active connection.Generally, application software is responsible for initializing the CAM620 with information that may be used to properly identify activeconnections. Exemplary identifying information that may be used by theCAM 620 may include source-address, destination-address, port number,and other such information. Information obtained from each incomingframe is then compared against the CAM entries to determine if thepacket corresponds to an active connection. In those instances where amatch occurs between the incoming frame and the CAM entries, the CAM 620returns the connectionID for the frame which may then be forwarded bythe parser 615 to later stages of the computational pipeline.

When IP fragmented frames are encountered, the fragment “0” frame willcontain the TCP header. The TGI-Rx 605 performs a special check for thisoccurrence and tags the TCP header of the corresponding frame. If theIP-fragmented frame represents a TCP segment with an iSCSI payload, theparser 615 selects the aforementioned slow-path-reason code (shown inFIG. 13B) to “iSCSI, IP fragment” such that the connection ID and otherTCP information will be forwarded to slow-path processing elements 645.

As previously indicated, the parser 615 utilizes the content addressablememory (CAM) component 620 to look up upper layer connection informationfor each frame which may include an associated TCP connection number.Typically, each active connection is associated with a unique TCPconnection number by application software. In one aspect, theapplication software associates the TCP number with a TCP-connection3-tuple comprising the source-IP-address, destination-IP-address, andTCP-port-number when it is created. Here, the 3-tuple is entered intothe CAM 620 at the location specified by the TCP number. Thereafter,software may delete the CAM entry when the iSCSI connection is closed.While the connection is active, however, a search within the CAM 620with a matching 3-tuple returns the TCP-connection number.

In various embodiments the CAM 620 and associated search keys areconfigured to be approximately 81-bits wide and comprise a 32-bit IPsource address, a 32-bit IP destination address, a 16-bit TCP portnumber, and a 1 bit flag indicating a target or initiator mode. In thetarget mode (TCP DPORT matched iSCSI) the SPORT is used for the searchwhile in the initiator mode (TCP SPORT matched iSCSI) the DPORT is usedfor the search. The search result returns a 10-bit TCP connection numberplus a valid flag.

In addition to a content-addressable memory array, the CAM component 620may further comprise a search request queue, a search result file, and asearch control block. Requests to the CAM component are summarized inFIG. 14. As shown in the illustration there exists a CAM-Key registerfor each network port. The register may be written by the parser 615incrementally as it parses portions of incoming packets. When all fieldsof the search key are assembled, a CAM_REQ command may be issued thatenqueues the search request to a CAM search request queue. Thereafter,the CAM 620 signals command completion by asserting a completion signalfor the corresponding port. At this point, a CAM_RESULT command may beused to acquire the TCP connection number resulting from the search anda valid bit. The valid bit provides an indication of whether the searchfound a matching entry within the CAM 620 and that the TCP connectionnumber in the result is valid.

To achieve frame processing at or near full line rate the CAM 620 isdesirably configured to perform lookups in a rapid and efficient manner.For example, in the current implementation, the CAM 620 is configured tocomplete a lookup in four or less cycles as a worst case average rate atwhich IP frames can arrive in the XGE mode. For the OGE mode, a similarconstraint is imposed as a result of the concurrent arrival of multipleframes. For example, frames may start back-to-back for approximatelyeight cycles, with an average rate of approximately one per four cycles.In such instances, a CAM search queue serves as a buffer for high demandinstantaneous bursts. In general, searches initiated by the parser 615have priority over CAM_LOAD, CAM_READ, and CAM_INV operations by aprocessor. In fact, a pre-emption technique may be employed wherein thelatter operations may be aborted if a search request arrives to improvethe processing speed of fast-path frames at or near full line rate.

In certain embodiments, the CAM 620 comprises approximately 1024entries. Thus, if the number of connections is limited to approximately1024, the CAM 620 can be expected to maintain substantially all activeconnections. In an alternative implementation, the CAM 620 can beconfigured to support more than 1024 connections. In this alternativeimplementation, the software can manage the CAM 620 like a cache suchthat when all entries are occupied and a new connection is created, thesoftware can delete an entry and replace it with an entry for the newconnection. Subsequently, when a frame corresponding to the replacedconnection arrives, it may be directed for slow-path processing insoftware. The software may then be configured to create a CAM entry forit, potentially replacing another existing entry. By judicious choice ofan entry replacement policy, the performance of this approach can behighly effective and give performance characteristics rivaling that of alarger CAM 620. In various embodiments, replacement policies mayinclude: replacing the least recently used entry and replacing an entrynot used for some selected time period.

For each frame, the parser 615 extracts information which is desirablycommunicated to later pipeline stages and components and sends thisinformation to the dispatcher 630 via a job queue component 622 (seeFIG. 11). FIG. 15 illustrates exemplary types of information that may beextracted by the parser 615. In one aspect, the job queue component 622may be implemented using a singular FIFO queue for each network port.These FIFOs may be further configured as bit-writable by the parser 615thereby enabling fields to be written as they are encountered in thepacket stream. When an End-of-Frame (EOF) indication is received by theparser 615 and after the results of the aforementioned CAM lookup areavailable, if no error conditions exist for the frame, the tail pointerfor the FIFO queue may be incremented thereby enqueueing an entry in theFIFO queue. If the frame is found to be erroneous, the tail pointer isnot incremented effectively dropping the packet.

The ingress buffer 625 buffers data as it arrives from network portsuntil the data can be deposited to a memory region in the applicationsoftware domain. In various embodiments, the ingress buffer comprises asingular FIFO queue for each network port in PIE-Rx 148. Theaforementioned principle of “zero copy” buffering may further beemployed in the design of PIE-Rx 148 where data is written directly todata structures in the address space of the application software. Ingeneral, main memory-based buffers, including for example networkinterface buffers or operating system buffers, are not necessarilyemployed for temporary storage, reorganization, or re-assembly of data.In conventional systems where main-memory based buffers are used, datamust be read and written to memory more than once. These reads andwrites to intermediate buffers consume memory bandwidth and impartperformance penalties on the system. In high bandwidth applicationswhere memory bandwidth is at a premium this represents a potentialbottleneck wherein intermediate buffer accesses significantly degradeoverall performance.

One implication of the zero-copy paradigm of the present teachings isthat data is not written to the application memory space until it isvalidated. Writing data contained in an erroneous or corrupted packetswould undesirably cause the application to generate potentiallyincorrect results. To avoid this problem, the PIE-Rx 148 buffers eachframe into the entirety of the ingress buffer 625 and validates itbefore writing to an application memory space. In one aspect, theingress buffer 625 for each network port is configured to be at least aslarge as the expected maximum size of incoming network frame. Forexample, Ethernet jumbo frames, the largest frames defined for Ethernet,typically possess a maximum size of 9016 bytes, consequently the ingressbuffer 625 for each network port is configured to be at least this largeto accommodate a full frame.

In various embodiments of the present teachings, a buffer size ofapproximately 10 Kbytes is used for each port with each bufferimplemented using a single-ported RAM. Each cycle, the control logicalternates between reading and writing operations (dequeueing andenqueueing, respectively). Following this approach desirably utilizesless chip area and less power than other conventional alternatives, suchas a dual port RAM. Additionally, circular buffers with read and write(e.g. head and tail) pointers may be used to implement each FIFO queue.

In addition to the read and write pointers, each FIFO queue may possessa “Frame-Start-Pointer”, which points to the first word of the currentframe. When an arriving frame is determined to be erroneous andsubsequently discarded, the write pointer may be reset to the valuecontained in Frame-Start-Pointer, effectively discarding the frame.

In various embodiments, the read-interface to the Ingress buffer 625comprises a random access interface. Rather than reading data in FIFOorder, the dispatcher 630 may access the data in random order. In thismanner, the dispatcher 630 may skip a selected number of data elements(e.g. qwords) contained in the queue and accesses a desired data elementfirst. By examining the desired data element first and comparing it withthe stored sequence number, the dispatcher 630 can determine if thecorresponding frame is a fast path frame. In such an instance, thedispatcher 630 need not read the first and second data elements at alland allows the dispatcher 630 to maintain full or near full line-rateoperation for fast-path packets.

There are two programmable thresholds associated with Ingress FIFOs: the“pause on” threshold and the “pause off” threshold. When a FIFO levelfirst exceeds the “pause on” threshold, the PIE-Rx causes a PAUSE frameto be sent to the upstream device on the corresponding network port.Subsequently, when the level drops before the “pause off” level, aPAUSE-OFF frame can be sent to the upstream device on the correspondingnetwork port. PAUSE and PAUSE-off are flow control packets defined inthe Ethernet specification.

The dispatcher 630 is responsible for routing frames to fast-path 640 orslow-path 645 processors, based on control information sent by theparser 615. Upon receiving a task from the job queue component 622, thedispatcher 630 performs functions that may include:

For in-sequence TCP segments containing iSCSI frames, the TCP payload isforwarded to the iSCSI PDU engine 640;

For out-of-sequence TCP segments, header information is sent to the slowpath processor 645 and data is directed to a region of heap space inapplication memory (referred to a “Rx Chunks”), from where it isre-sequenced;

For non-IP fragmented TCP frames, a message containing informationrelated to TCP-protocol processing including acknowledgement, windowing,and retransmission (AWR) is passed to the AWR subsystem 650; and

For packets marked as IP-fragmented or with other exception reason codes(except possibly codes 0 and c) that may utilize software handling, thepackets are sent to the PIEMan subsystem 655 for software processing.

In certain embodiments, the dispatcher 630 processes frames from aplurality of network ports. These frames arrive at the dispatcher in theform of time-multiplexed data streams, one from each network port. Sincethe dispatcher consists of a single state machine that must processmultiple data streams, it maintains context for each network port, asshown in FIG. 16. While processing data from a particular network port,the dispatcher state machine uses context for that specific port.

Additionally, the dispatcher 630 processes frames from a plurality ofTCP connections at the same time. In order to do so, it maintains stateinformation corresponding to the data streams from each connection inthe form of “connection contexts”. Typically, a single context isassigned for each connection. Elements of the context are listed in FIG.16. As the dispatcher switches between connections, it accesses thecorresponding context.

The dispatcher maintains connection contexts in a private memory calledthe FPRAM. However, when slow path processing is required for aconnection, it copies the context to a region of main memory to enablethe NRT processor to access the information. Once the NRT processor isdone, and the connection returns to fast path, the context is copiedback into the FPRAM.

The dispatcher 630 may further be optimized for the fast path iSCSIprocessing at or near full line rate. In general, the dispatcher 630 isconfigured to handle fast-path iSCSI frames relatively expediently andefficiently, prior to considering other frame types. In one aspect, ascenario in which a frame comprising a fast path iSCSI frame isidentified is termed an “expected scenario”. The dispatcher 630 fetchesframe data from the ingress buffer 625 on the basis of where it isexpected to be located in the expected scenario. If upon furtherexamination it is determined that due to the presence of IP options,fragmentation, and other exceptions, the information is not locatedwhere it would reside in the expected scenario extra cycles may beinvolved in processing.

In one aspect, the steps involved in processing include:

The dispatcher 620 fetching the job from the job queue 622 andconcurrently fetching the third qword of the ingress buffer 625 using arandom access mode when the job is available. In the expected scenario,the TCP sequence number and ACK number are located in the third qword.

If the job is determined to be an iSCSI job, the dispatcher 630 fetchesthe fourth qword from the ingress buffer 625, in the aforementionedrandom access mode, as well as the connection context for thecorresponding connection. These two fetches may be performedconcurrently. In the expected scenario, the TCP sequence number for theframe may be compared with the TCP sequence number in the connectioncontext for the corresponding connection. In the expected scenario, thenumbers will match and the iSCSI frame may be dispatched to the iSCSIPDU engine 640 and headers/TCP control information dispatched to the TCPProtocol Processing or AWR subsystem 650. The iSCSI PDU engine 640subsequently moves the data payload from the ingress buffer 625 to thedesignated space in application memory and the information in the FPRAMis updated.

In one sub-case instance, the sequence number may not match, but the sumof the sequence number in the frame and the TCP payload length may beless than the expected sequence number in the connection context. Inthis scenario, the frame may be determined to be a duplicate, anddepending on a flag configured by software, the frame may be discardedor passed to the slow-path processor 645.

In another sub-case instance, the dispatcher 630 or application softwaremay set a bit in the FPRAM, causing subsequent frames for thecorresponding connection to proceed through the slow path processor 645at least until the bit is reset.

If IP options are present within the frame, the location of the TCPsequence number may be determined to depend on the number of IP optionwords in the frame. The TCP sequence number may then be desirablyextracted from the third, fourth or fifth qword. Once the sequencenumber is extracted, it may be compared with that in the FPCB. If thenumbers match, the frame may be processed as a fast path frame anddispatched as indicated above. In addition, the IP options may beextracted and a control message sent to the PIEMan 655 for processing ofthe IP options.

The presence of TCP options also affects the start of the iSCSI payload.Hence, when this is indicated in the TCP header, the offset at whichiSCSI PDU starts is calculated and the PDU is demarcated based on thecalculated offset.

In various embodiments, the three values (hex c, d, and e) of theslow-path-reason code shown in FIG. 15 are defined by the dispatcher 630and used as described hereinbelow.

Slow path processing may be employed in cases where the slow-path-reasoncode is greater than 0. According to this embodiment, two distinctprocessors may be used for slow-path processing and including theNon-Real-Time processor 645 responsible for re-sequencingout-of-sequence TCP segments that are iSCSI PDUs and the PIEManprocessor 655 responsible for other exception frames.

In various embodiments, NRT path processing may proceed as follows:

In NRT path cases, the frame is stored in a heap space referred to as“Rx chunks”;

If the code is 8 or greater, the TCP connection number is determined tobe valid, and fast path processing is not disabled, the dispatcher 630may disable fast path processing for the connection. In one aspect, thedispatcher 630 may set a fast-path-disabled bit for the correspondingconnection in the FPRAM and then copy the content to the FPCB in mainmemory, where it can be access by the NRT 645.

For iSCSI frames with valid socket IDs, the dispatcher 630 may calculatethe next expected sequence number by adding the received sequence numberto the TCP payload length. If the resulting value is less than theexpected Seq_number in the FPRAM, the FPRAM value may be updated,whether or not fast path is enabled. If the fast path is disabled, thenext_seq number may be used to determine when to return from slow pathto fast path.

For non-iSCSI frames, corresponding to slow-path reason codes 1-7, thecontrol information may be forwarded to the PIEMan processor 655, forprocessing in software. Similarly, for IP fragmented iSCSI frames,corresponding to slow-path reason code 8, the control information may beforwarded to the PIEMan processing 655, for processing in software.

For slow-path reason codes 9-d, if IP options are present within theframe, the control information may be sent to the PIEMan processor 655.If IP options are not present, the control information is sent to thenear real time processor 640.

In order to reduce the size of buffers used in the ingress buffer 625,the dispatcher 630 may perform a time-multiplexing operation betweendata from distinct network ports when unloading frames from the ingressbuffer 625 to application space in main memory. In one aspect, jumboframes may occupy as much as approximately 90% of an ingress FIFO, ifeach Jumbo frame resides in discrete ingress FIFOs, corresponding todiscrete network ports, and the frames are unloaded one at a time,overflow may occur. Therefore, it is beneficial to unload the frames inparallel, prioritizing them by the instantaneous degree of fullness ofeach ingress FIFO. Processing in this manner may result in substantiallyall FIFOs being unloaded without significant overflow or PAUSE frames.

FIG. 17 further illustrates a block diagram 800 of the routingfunctionality provided by the dispatcher 630. For TCP segmentscontaining iSCSI frames, the switch from RT path to NRT path and viceversa is negotiated by the dispatcher 620 that is configured to decidewhether a frame should proceed through the NRT path or stays in RT path.In various embodiments, this determination is based on conditions thatmay include (a) the value of the fast-path-disable bit in the FPRAM forthe connection and (b) the value of the TCP sequence number in theframe. NRT path frames 805 are sent to the NRT (slow path) processor 645for re-assembly 810. After re-assembly, the frames 815, now in-sequence,are forwarded to NRT path hardware subsystem, which includes an iSCSIPDU engine 640. The iSCSI PDU engine 640 demarcates the iSCSI PDUs andforwards them to the storage application software. There are twoinstances of the iSCSI PDU engine—one in the RT path subsystem andanother in the NRT path subsystem. The use of duplicate iSCSI PDUengines makes the transition between NRT and RT paths significantlyeasier than if one engine were shared between the two paths.

After processing each frame, the iSCSI PDU Engine 640 further checkswith dispatcher associated FPRAM 820 to determine if theexpected-sequence-number after the frame just processed is equal to theexpected-seq-number in the FPCB 825 in the FPRAM 820. If so, the iSCSIPDU Engine 640 resets the fast-path-disable bit in the FPCB 825 in theFPRAM 820 and frame processing returns to fast path. Additional detailsof the switch from fast-path to slow-path and vice versa is illustratedin an exemplary decision tree shown in FIG. 18A.

In various embodiments, the iSCSI PDU Engine (IPE) 640 is configured toreceive an in-sequence TCP stream and demarcate iSCSI PDUs within thestream. The iSCSI PDU Engine 640 further validates optional header anddata digests (e.g. CRCs) and checks header fields such as targettransfer tag and PDU data length for consistency. The IPE 640 is ahardware accelerator for parsing and demarcating iSCSI PDUs. It receivesa time-multiplexed stream of data corresponding to one or more networkports from the parser and the dispatcher. After parsing the incomingdata stream and demarcating the iSCSI PDUs and SCSI data, the IPE 640sends the SCSI commands and non-SCSI data to the iSCSI-layer software,which in various embodiments is integrated into the SNP storagecontroller application. Typically, SCSI data is deposited directly to amemory region reserved for it by the storage controller application. TheIPE also validates optional header and data digests (CRC) and performschecks on header fields, such as the target transfer tag and PDU datalength.

In certain embodiments, there are two instances of the IPE, one each inthe RT and NRT paths. The instance in the RT path receives atime-multiplexed data stream from the dispatcher. The instance in theNRT path receives packets after re-sequencing by the NRT processor. Eachnetwork port receives TCP streams from several TCP connections. Thus,TCP segments from each connection may be interleaved with those fromothers. iSCSI PDUs are embedded in each TCP stream in order. However,iSCSI PDUs may start and end at any position in a TCP stream, withoutknowledge of the segmentation. Thus, iSCSI PDUs may be scattered overmultiple TCP segments. A TCP segment may contain zero or more completeiSCSI PDUs and one or more fractional iSCSI PDUs.

In order to parse TCP streams from N connections (in the currentembodiment, N=1024), the IPE maintains context for each connection in aregion of memory. The RT path IPE maintains the state in theabovementioned FPRAM, which is also accessible by the dispatcher. TheNRT path uses a region of main memory for context storage. The IPE savescontext at the end of a frame or segment, to be retrieved later when anew frame or segment for the same TCP connection is encountered. FIG.18B summarizes the fields in the context maintained in the FPRAM.

The IPE may additionally be capable of receiving time-multiplexedstreams of TCP segments, one from each network port. In this scenario,the interleaving is at a much finer grain than described above. It mayreceive a few bytes from one frame before context switching to another,much like the parser and dispatcher. This mode of operation is referredto as the IPE TDM mode.

The IPE TDM mode may be advantageously used when large Ethernet framesare employed, such as specified by the jumbo frames standard forEthernet. Since the TDM mode allows the IPE to retrieve partial segmentsfrom the ingress buffer, a smaller ingress buffer may be used in thePIE.

In an additional aspect, the IPE deposits SCSI data to a memory regionindicated by the storage application software. As described elsewhere,iSCSI commands carry a “transfer tag” field which may be used to relateresponses to requests. For instance, when the SNP sends an iSCSI R2Tcommand to an iSCSI initiator, it may include a unique transfer tag inthe command. When the initiator returns data corresponding to the R2Tcommand, it may include the same transfer tag in the data PDU.

Before sending an R2T command, the storage application determines theaddress where the data should be deposited when received from theinitiator. The address is referred to as the data pointer. It associatesthis information with a transfer tag and places the 3-tuple <connectionid, transfer tag, data pointer> in a table called the Data Pointer Table(DPT). The DPT is also accessible to the IPEs in the RT Path and the NRTpath, so that they can deposit incoming data directly to the intendedlocation in accordance with the “zero copy” paradigm.

FIG. 18C illustrates a block diagram of the flow of information throughthe IPEs. As illustrated, the IPE in the RT Path receives frames fromthe dispatcher and processes them in real-time in a pipelined manner. Itparses the frames and verifies data digests. Subsequently, if the frameincludes SCSI Data (that is, data to be written to disk), it looks upthe Data Pointer in the DPT for the associated transfer tag andconnection id. Based on the indicated buffer offset in the iSCSI PDU andthe data pointer, the destination address of the data is calculated.Data is transferred starting at the destination address. Generally,headers and non-SCSI data are sent to the storage application softwarevia a queue called the iSCSI-Rx-Queue.

The IPE in the NRT path receives iSCSI PDU descriptors from the NRTprocessor after re-sequencing. These include header information as wellas pointers to the payload (if any) in the Rx-Chunks area of mainmemory. Thus IPE is not necessarily required to access the FPRAM.Instead, the IPE may be configured to load/restore context informationfrom a dedicated region in main memory, after the context informationhas been deposited there by the RT processor. Subsequent processing issimilar to the IPE in the RT path.

The IPE comprises two components: a iSCSI digest checker and a finitestate machine (IPE-FSM) for parsing incoming data streams. The IPE-FSMis complex because of the large number of alignment possibilities itmust handle in real-time. iSCSI PDUs may appear at any position in a TCPstream. Further, each quad-word (the unit of data that the IPE-FSM looksat each cycle) may contain one or more PDUs, for PDUs can be as small asone byte. Additionally, in certain instances only a subset of the bytesin a qword may be valid. Furthermore, the data stream may containerrors. Each of these possibilities contributes to the complexity of theIPE-FSM.

The aforementioned Acknowledgement, Windowing, and Retransmission (AWR)subsystem 146 provides functionality for hardware acceleration ofnetwork protocol processing at high rates. As previously indicated theTransmission Control Protocol (TCP) is the dominant protocol used bydata communication networks and is responsible for reliable, in-order,delivery of data. In addition, it is responsible for congestionmanagement and flow control via mechanisms that may be termed “windowingmechanisms”. Today, most Internet applications are configured to utilizeTCP for communication. For applications that communicate data atrelatively low bandwidths, the processing involved in the protocol maybe performed in software without undue performance degradation. However,for increasingly high bandwidth applications, it is advantageous toutilize hardware accelerators to perform protocol processing. In variousembodiments, the system and methods described herein can be used inconnection with a large class of platforms, including computers,servers, network interfaces for computers, specialized networkingplatforms including security processors, server load balancers, webswitches and TCP proxies, and network-attached storage devices.

FIG. 19 illustrates a detailed block diagram 900 for the AWR subsystem146. The AWR 146 comprises one or more general purpose processors,referred to as ARC processors, coupled to one or more hardwareacceleration components. According to certain embodiments of the presentteachings, these components comprise: a TCPCB Cache 905, a Scratch Padmemory 910, a Message TCPCB loader/saver 915, a VLIW processor 920, aMaster Scheduler 925, an Event Machine 930, a Pending Queue 940, and aMessage/Header Output Processor 945.

As previously noted, computation involved in TCP protocol processing maybe categorized into three paths including: (a) the Real Time (RT) path(also referred to as the “fast path”) (b) the Non Real Time (NRT) path(one aspect of “slow path”) and (c) the Protocol Intercept EngineManagement (PIEMan) path (a second aspect of “slow path”).

The RT path is typically associated with intensive data movement in asteady state TCP connection. In one aspect, the operations associatedwith fast path processing include generating acknowledgements, managingwindow sizes for flow-control and congestion control, andretransmission. In general, hardware accelerators are used to improvenetwork communications performance within the RT path. FIG. 20 depictsthe hardware components used exclusively to accelerate the RT path.These constitute the RT-Accelerator block 1000. In various embodiments,the RT-accelerator 1000 is capable of processing normal (common case)TCP traffic at a rate of approximately 10 Gbits/sec with higher ratesachievable using similar designs.

The NRT path is typically associated with slower and infrequent parts ofTCP protocol processing. These operations may include re-sequencing TCPsegments that arrive out-of-sequence, TCP connection setup and teardownprocessing, and TCP options processing. Computations for the NRT pathprocessing may be accomplished in software on a general purposeprocessor. In various embodiments, NRT path processing may be performedon a dedicated general purpose processor referred to as a NRT ARCprocessor 955.

The PIEMan path comprises the computational operations involved inmanagement aspects of networking protocols. Management protocolsincluding by way of example ARP, ICMP, RIP, and OSPF may be handledthrough the PIEMan path as well as fragmented IP frame and IP optionshandling. Like NRT path processing, PIEMan path processing may beaccomplished in software on a general purpose processor. In variousembodiments computations for the PIEMan path may be performed on adedicated general purpose processor referred to as a PIEMan processor960.

Each of the aforementioned paths and associated processors 950, 955, 960are further configured to access the TCPCB Cache 905, the TCPCBloader/saver 915, the Pending Queue 940, the Event Machine 930, andScratchpad memory 910. Details of the interoperability of thesecomponents are described in greater detail hereinbelow.

As previously noted, the TCP protocol stack is large and softwareimplementations may comprise approximately 20,000 lines of code or more.A significant fraction of this code typically corresponds toinfrequently executed portions of the protocol (e.g. infrequentcases/non-common cases), which need not be accelerated as theircontribution to processing capacity utilization is minimal as comparedto common case network traffic. In the AWR 146 these aspects of theprotocol are executed in software using general purpose processors. Formore frequently executed portions of the protocol (e.g. common case),there is a significant design tradeoff between using hardwareacceleration and maintaining flexibility through programmability. If theprotocol is implemented entirely with dedicated state machines inhardware, programmability is lost.

In one aspect, it is desirable to maintain programmability for a numberof reasons. For example, enhancements and variations to the TCP protocolare typically developed over time. Programmability is desirable toimplement new TCP protocol features that may include window managementpolicies, congestion control policies, and retransmit policies.Furthermore, since the protocol stack is generally large, there is thepossibility that an implementation may have an error or systemicinefficiency contained within. As will be appreciated, it is notuncommon for errors to be found in commercial software implementationsseveral years after they've been in the market. For these reasons, theAWR design 146 implements the RT path aspects of the networking protocolin firmware on the relatively high performance VLIW processor 920.

The VLIW processor 920 can desirably execute a number of operations inparallel but is less complex than a superscalar processor. In a VLIWprogram, instructions may be scheduled statically by the programmer or acompiler. On a superscalar processor, the processor generally mustdynamically figure out how to schedule instructions resulting insignificant complexity and energy consumption. However, in the absenceof dynamic scheduling capability, the VLIW processor operates at peakrates only when it does not have to wait for long memory access times.In this regard, the AWR 146 pre-fetches data that the VLIW processor 920requires into a local memory store (e.g. TCPCB cache 905 and scratchpad910) before triggering the VLIW processor 920 to start processing. Thus,the VLIW processor 920 takes a fewer number of cycles to execute the RTpath instructions. In various implementations, VLIW processor 920 takesbetween approximately 30-70 cycles, depending upon the processing path.

As shown in FIG. 20, an exemplary RT-Accelerator subsystem 1000comprises a general purpose processor 1005 coupled with a VLIW processor1010 with a message/TCPCB loader 1015 and a packet header formatter1020. In alternate implementations, such as ones targeted to highertraffic rates, two or more VLIW processors may be used. Alternately, twoor more RT-Accelerator blocks may exist within each AWR system and withnetwork traffic possessing distributed among them.

The aforementioned blocks 1005, 1010, 1015, 1020 operate as a pipelinewherein messages are received by the message/TCPCB loader from a MasterScheduler 1025. These messages correspond to tasks defined within themessages that are to be executed. In one aspect, the Message/TCPCBloader block 1015 fetches a TCPCB from a TCPCB Cache area (not shown)and stores data contained in the TCPCB into registers 1030 in the VLIWprocessor 1010. The Message/TCPCB loader block 1015 further loads thecontent of the message itself into the registers 1030 in the VLIWprocessor 1010. For purposes of improving efficiency and processingspeed, the registers 1030 may be loaded in parallel. Using conventionalprocessors and register files would take significantly more time to loadand unload a large number of registers, resulting in much lowerperformance. Thus, the parallel register loading capability is a keyaccelerator in this design.

Once the registers 1030 have been loaded, the VLIW processor 1010commences processing. When complete, the contents of the registers 1030are transferred to the RT ARC 1005. In various embodiments, the RT ARC1005 comprises two register sets 1040 (register file 0 and 1), allowingone to be loaded from the VLIW processor 1010 while the other isactively used by the RT ARC 1005. After the RT ARC 1005 has completedprocessing, if there is a frame to be transmitted, the headerinformation for the new frame is passed to the Packet Header Formatter1020 (a component of the Message/Header Output Processor block 945 shownin FIG. 19). At the end of the pipeline phase, the updated TCPCB headerinformation may be written back to the TCPCB Cache 905.

Referring again to FIG. 19, in certain instances the RT-Accelerator 1005may receive a message that requires post-processing by the NRT Processor955. In other words, after some processing in the RT Path 950, the taskmay be continued in the NRT Path 955 in software. In such cases, the RTARC 950 will forward the message to the NRT processor 955. Examples ofwhere the aforementioned scenario occurs include (a) termination of TCPconnections and (b) TCP options processing.

When terminating a TCP connection, the frame is first processed by theRT-Accelerator 950. Subsequently, the slow path task of closing the TCPconnection may be executed by the NRT processor 955. In performing TCPoptions processing, the RT Accelerator 950 may process the fast pathaspects of the frame initially and subsequently hand off the TCP optionsprocessing to the NRT processor 955. In the aforementioned examples,transferring a portion of the processing to the NRT processor 955 mayinvolve the RT-Accelerator 950 writing message data into the scratch padmemory 910.

If the NRT input queue becomes full and the RT-Accelerator 950 is unableto enqueue a message to the NRT 955 immediately the message may bepassed to the master scheduler 925 and flagged to indicate that themessage is targeted to the NRT 955. In this way, undesirable stalls inthe system are avoided and processing efficiency is maintained.

The message/TCPCB loader block 915 shown in FIG. 19 is responsible forpopulating the registers in the VLIW processor 920 in a timely manner.In one aspect, the message/TCPCB loader block 915 fetches a TCPCB fromthe TCPCB cache 905 and maps relevant fields onto the VLIW processorregister file. The message/TCPCB loader block 915 may also extractselected fields from the message header that describe the processingtask and map them onto the VLIW processor register file. Subsequently,the message/TCPCB loader block 915 may copy the data in parallel to theVLIW processor's register set. Parallel processing in this mannerdesirably reduces the number of cycles required to perform thisoperation.

In various embodiments, the VLIW processor 920 makes use of a pluralityof execution pipelines with each pipeline containing one or more ALUs.As a result, the processor 920 can perform a plurality of ALU operationsin parallel during each cycle. Typically, the execution pipelines sharea register file that allows results produced in one cycle on onepipeline to be used in the following cycle in another pipeline.Additionally, condition codes from each pipeline are available to eachother immediately (e.g. in the same cycle). This feature enables theprocessor 920 to execute complex conditional operations with reducedlatency. Taken together these features allow code to be packed in ahighly efficient manner. For example it is readily possible to achieveprocessing of a plurality of instructions (e.g. 4 or more) insubstantially each cycle.

The design of the VLIW processor 920 is such that it need notnecessarily access main memory or any information that may take moreextended periods of time (e.g. more than one cycle) to access. As aresult, the processor 920 can be operated at a peak rate or near peakrate the majority of the time. In various embodiments, execution timesin the VLIW processor 920 range from between approximately 30 cycles toapproximately 70 cycles per message, depending on the type of messagebeing processed.

In various embodiments, the RT ARC 950 represents a general-purpose RISCprocessor with a dual-context register file. The nature of the registerfile is such that as one register set is being actively used forcomputation on the processor, the other can be loaded or unloaded. TheRT ARC 950 can further switch between registers in a single cycleenabling highly efficient data transfer between components in the RTaccelerator 950.

The packet header formatter 1020 of the AWR subsystem 146 is responsiblefor building packet headers from information provided by the RT ARC 950and that contained in the TCPCB cache 905. In one aspect, informationdescribing the type of header is contained in the TCPCB cache 905 withthe RT ARC 950 specifying the sequence number, acknowledge number,payload size, and timestamp for the header.

The Master Scheduler 925 is responsible for scheduling RT-Acceleratorblock processing and receives messages from various sources including:the PIE-Rx network receive interface 148, the event machine 930, and thepending queue 940. In one aspect, the messages received from the eventmachine 930 correspond to event messages that indicate expiration oftimers while messages received from the pending queue 940 correspond toframes waiting to be transmitted. The aforementioned messages representinformation related to processing tasks and may contain the TCPconnection ID for the message as well as all relevant controlinformation required for the task (including message type and packetheader information). In one aspect, the current state of each connectionis contained in the TCPCB for the connection, which resides in mainmemory, and is cached in the TCPCB Cache 905.

Tasks are scheduled for processing by the RT-accelerator 950 based upona priority schema wherein the PIE-Rx messages have the highest priority,Pending Queue messages have the next lower priority, and Event messageshave the lowest priority. In order to avoid blocking of lower prioritymessages, the master scheduler 925 enforces a fair arbitration mechanismbetween the message types. However, the fair arbitration mechanism maybe suspended when the number of messages for a higher priority messagetype exceeds a selected threshold.

Messages are verified to be ready for processing by the master scheduler925 that checks a number of conditions. In one aspect, the masterscheduler 925 checks with the TCPCB Cache Manager 905, to determine ifthe TCPCB for the corresponding connection is available in cache. If theTCPCB is not available, a request to fetch it is issued and the taskwaits until TCPCB is available in the cache. When available the task maybe scheduled by the master scheduler 925.

The master scheduler 925 further checks a TCPCB Lock Domain Manager todetermine if any other task corresponding to the same connection iscurrently active. If so, the task waits otherwise the task may bescheduled. For pending queue messages, the master scheduler 925additionally checks for space in the output processor to absorb theresults. For event messages, the master scheduler 925 verifies thatscratch pad memory 910 is available. This check is made to insure thatif the RT-Accelerator block 950 needs to pass the message to the NRTprocessor 955 the space will be available. When the aforementionedconditions are met and the VLIW processor 920 is made available and themessage is scheduled.

The event machine 930 may be used to manage TCP timers. TCP protocolprocessing requires the maintenance of a four timers associated witheach TCP connection including a retransmission timer, a persist timer, akeep-alive timer, and a 2MSL timer. Each timer is initialized andtriggered at various points in the TCP protocol. Timer values typicallyrange from a few tens of milliseconds to a few hours or more. When atimer expires, the protocol requires certain actions to be taken. Forinstance, the retransmission timer is initialized and triggered when asender transmits a packet. If the timer expires before the correspondingAcknowledgement is received, the base TCP protocol requires that thesender re-transmit the packet. The value of this timer is based on anestimation of the round trip delay from transmission of packet toreceiver and the reception of an acknowledgement of the packet at thesender.

Timers are added to the event machine 930 by specifying their expirationtime and may be deleted or updated to a new expiration time. The eventmachine 930 further keeps track of the expiration time of each timersuch that when the current time (as maintained by a free runningcounter) exceeds the expiration time of a selected timer, the eventmachine 930 sends a message to the master scheduler 925 indicating theconnection ID associated with the timer.

As previously indicated, a plurality of TCP connections are supported bythe system. For each connection, the event machine 930 manages the timerwith the earliest expiration time and when this timer expires othertimers can be checked, as necessary. In various embodiments, the eventmachine 930 comprises a hardware component specialized in the task ofmanaging these timers.

The event machine 930 further comprises three components including anevent processor, an event chain, and a message formatter. The eventchain represents a data structure for storing timers in a sorted mannerand may be characterized by N buckets of granularity T where T is a timeinterval. In various embodiments, each timer is assigned to a bucketusing the formula:Bucket_ID=(expiry_time modulo(N*T))/T  Formula 1

For example, if T is 1 second and N is 100, then timers with expirationtimes of 5, 7, 105, 207, and 305 seconds will be categorized intobuckets 5, 7, 5, 7, and 5 respectively. Timers in each bucket may thenbe maintained as a sorted linked list with the earliest expiration timefirst.

In certain embodiments, the event processor is responsible formaintaining the event chain and executes external operations including:adding event timers, deleting event timers, and updating-and-movingevent timers. Furthermore, the event processor may be configured tocontinuously scan the event chain for expired timers. When a timerexpires, the message formatter may be configured to enqueue a messagefor the message scheduler 925. The contents of the message are based oncontrol information associated with the timer.

The block diagram shown in FIG. 21 illustrates one embodiment of theaforementioned PIE-Tx path and its associated modules. In one aspect,the PIE-Tx path provides for frame handling functionality used totransmit data and information across the network. The PIE-Tx module maybe configured to support two types of transmit queues including: iSCSITx queues (having one queue per iSCSI connection) and raw Tx queues(having two priorities per port).

In various embodiments, the iSCSI Tx queues are used by the iSCSIprocessor to specify iSCSI PDUs for the PIE Tx. Transmission from thesequeues may be controlled by the AWR, which may bee configured torecognize when the queues contain entries to transmit (for example froma msgTxData message from the iSCSI processor), and when the Tx window isopen enough to transmit a frame (for example from the msgRxNotifymessage from PIE Rx). The AWR may further be configured to generate Txrequests to PIE Tx, which assembles iSCSI frames using Ethernet, IP, andTCP headers supplied by the AWR, iSCSI headers prepared by the iSCSIprocessor in buffer memory, and data from buffer memory. The PIE Tx mayalso be configured to generate and insert optional iSCSI header and datadigests (e.g. CRCs). Also, in certain embodiments, if any iSCSI PDU endsin the frame, the PIE Tx may optionally be configured to set a PUSH flagin the TCP header.

In various embodiments, the raw Tx queues contain pointers to non-iSCSIframes in buffer memory. On a per-port basis, high priority raw framesmay take precedence over iSCSI frames, which may take precedence overlow priority raw frames. The PIE Tx may be configured to service one ormore output port(s) based on the presence of Tx requests for each portand the availability of space in each port. For each port, the TGI maybe configured to contain an egress FIFO large enough to store andforward a frame or jumbo frame (approximately 9K).

In one aspect, the large egress FIFOs, provide a means for the PIE Tx tobe able to generate TCP checksums for iSCSI frames on the fly. Thechecksums may further be configured to cover a pseudo header region(SIP, DIP, IP protocol, and TCP length), TCP header, and TCP payload. Atthe frame end, the PIE Tx may be configured to insert the checksum intothe TCP header which has been stored in the egress FIFO. Subsequently,the PIE Tx signals the network interface (e.g. TGI) that the frame isnow ready to transmit from the FIFO. In one aspect, these actionsdesirably allievate the need to generate checksums and CRCs for 512-byteSCSI data blocks in buffer memory, or to trim back a Tx frame to a512-byte boundary in buffer memory.

An entry in the iSCSI Tx queue may comprise approximately four words(one qword) and describes a contiguous area of buffer memory totransmit. An exemplary entry has the format shown in FIG. 22 (reservedfields may be zeroed) wherein the fields may be described by:“last”—This entry is set if this is the last entry for the PDU;“digest”—This entry is set to enable iSCSI digest for this type;“type[1:0]”—This entry is set for information type (01=header, 10=data,11=text); “length[15:0]” this entry is set for length for this type inbytes, 0=64 KB; “pointer[31:0]”—This entry is set for the startingaddress in buffer memory; additionally two reserved words may be used byPIE Tx to manage transmission and re transmission.

In one aspect, the iSCSI processor prepares a PDU for transmission asfollows: Step (1) Prepare the iSCSI header in ARC scratch RAM; Step (2)Get a Tx chunk (pop an address from the Tx chunk queue); Step (3) DMAthe header from scratch RAM to the Tx chunk in buffer memory; Step (4)If the “text” payload exists (any data segment which should be createdby the processor, e.g. responses), create in scratch RAM, get Tx chunk,DMA to the Tx chunk area. Repeat until complete; and Step (5) pushentries to the iSCSI Tx queue to specify the PDU (push/inc each qword).FIG. 23 illustrates application of the aforementioned description forexemplary iSCSI Tx PDUs.

In various embodiments, as the iSCSI processor is preparing PDUs fortransmission, the iSCSI processor sends msgTxData messages to the AWR.The iSCSI processor may then choose to wait until a selected number ofsmall entries have been pushed, or after each large entry is pushed. Thetransmit length in the message may further include various iSCSI digestwords, for example, the transmit length for an R2T PDU with headerdigest may be 52 bytes.

In one aspect, there is one istx_ctl structure per iSCSI connection, asshown in FIG. 24. At connection (or start up) time, software may beconfigured to set up the queue base address and limit per the associatediSCSI Tx queue settings, and zero the next tx, next retx, partial CRC,and rd offset fields. Thereafter, the istx_ctl structure may bemaintained by PIE Tx, which may use the information to directly accessthe entries as system memory data.

In various embodiments, the iSCSI Tx queue entries are transformed byPIE Tx as necessary into istx entry structures. The third word in theoriginal PDU request may be made available to indicate a 16-bit byteoffset to where to transmit or retransmit next within this entry. Thefourth word may be made available to store generated CRC values forpossible retransmission later. When entries are no longer needed forretransmission (per the msgTxAckd message from the AWR), the PIE Tx maybe configured to release acknowledged Tx chunks (header or text) back tothe Tx chunk pool, and pop any acknowledged istx entry structures off ofthe iSCSI Tx queue (pop/dec each qword).

An entry in the raw Tx queue comprises two words (one dword) long anddescribes a contiguous area of buffer memory to transmit. Each entry maybe configured with the format shown in FIG. 25 describing Raw Tx queueentries (reserved fields may be zeroed). For each entry “last” may beset if this is the last entry for the frame; “length[13:0]” may be setas the length for this entry in bytes; and “pointer[31:0]” may be set asthe starting address in buffer memory.

In various embodiments, the PIEman may be configured to prepare a framefor transmission as follows: Step (1) The PIEman may prepare the frame(or partial frame) in ARC scratch RAM. This may include the Ethernetheader and encapsulation headers, as appropriate; Step (2) The PIEmanmay be configured to get a Tx chunk (pop an address from the Tx chunkqueue); Step (3) The PIEman may be configured to DMA from scratch RAM tothe Tx chunk in buffer memory. These steps may be repeated until theprocess is complete and thereafter the PIEman may be configured to pushentries to the raw Tx queue to specify the frame (increment at the endof the last entry for the frame).

In one aspect, for multiple-entry frames, each entry should completelyfill its Tx chunk except for the last entry which may be shorter. Flowcontrol for raw frames may be handled substantially completely by PIEmanor an upper level, and does not interfere with AWR flow control.Typically, the maximum frame size is expected to be 9000 bytes plus theEthernet header.

The PIE Tx pops and processes entries (dwords) from the queue until itpops the last entry, at which point it decrements the queue. After thePIE Tx completes an entry from the raw Tx queue, the pointer is silentlypushed back to the Tx chunk queue (no message is sent to PIEman The PIETx then indicates “end of frame” to the TGI when data for the last entryhas been copied to the egress FIFO.

The following section provides details describing various embodiments ofthe Memory Structure Accelerator (MSA) and the corresponding modulesused by iSNP. Additional details regarding the various components andmodules described herein may be found elsewhere in the specification.

The Memory Structure Accelerator (MSA) is an accelerator for managingand accessing queues and stacks. If queue and stack data structures weremanaged entirely using software, the management and access operationswould take a large number of cycles, specially when a number ofprocessors or other components of the iSNP access them concurrently.Several memory operations would be required to push, pop, enqueue,dequeue, or advance a queue pointer. Further, for each operation toappear atomic, mutual exclusion operations would be involved. Since theiSNP architecture involves a large number of queues and a number ofagents accessing them concurrently, it is highly advantageous toimplement queue management in hardware in the Memory StructureAccelerator (MSA).

The MSA provides support for up to 8192 queues and stacks. Queues may beaccessed by hardware components of the iSNP or by software componentsrunning on one of the processors in the ISNP. The MSA supports thecommunication of information from a hardware component to a hardwarecomponent, a hardware component to a software component, a softwarecomponent to a hardware component, and from a software component to asoftware component.

Each queue or stack has a descriptor and descriptor extension which arelocated within main memory. These descriptors contain information aboutthe structure's size, data location, thresholds, and signaling methodswhen significant events occur. The data contained in each queue or stackis located within system memory.

Queues are implemented using a contiguous region of memory as a circularbuffer. The boundaries of the region are indicated in the descriptors.There are three other fields in the descriptor: the readpointer (rptr),the write pointer (wptr), and a count register. In various embodiments,the rptr points to the current head of the queue, from where elementsare de-queued. The wptr points to the current tail of the queue, towhere elements are en-queued. The count is used to keep track of thenumber of elements in the queue at any time, so that a queue-fullcondition may be detected. Stacks are also implemented using acontiguous region of memory. The stack generally has a single pointer,the write pointer (wptr), and a count register.

In various embodiments, the Memory Structure Accelerator supports aplurality of commands for the manipulation of queues and stacks.Exemplary commands are illustrated in FIG. 26. Agents using the MSAqueue can push or pop or enqueue or dequeue substantially any amount ofinformation (any number of bytes) in a command. Furthermore, the countmay be incremented or decremented by substantially any amount. Thismakes the MSA highly versatile.

A block diagram of the Memory Structure Accelerator (MSA) is shown inFIG. 27. Each block is described in the sections below. In the currentembodiment, the MSA is implemented using four principal blocks: QueueWorking Registers and Counters that contain the context associated witheach active queue, a state machine used to execute MSA commands andmanipulate state as needed; the Configuration Registers, which are usedto specify the location of the queue descriptors and queue descriptorextensions in system memory; the Queue State Flags.

In the current embodiment, the MSA provides a plurality of taps orinterfaces to external components. A2B and A2R are interfaces to twobusses in the SNP system. The A2B Tap (Interface) is the means used byany external block to access data in system memory via the MemoryStructure Accelerator block. The A2B interface is standard for allblocks within the design that access system and buffer memory, as wellas hardware blocks that access system and buffer memory such as the L2Cache and this block. Two A2B taps are used in the Memory StructureAccelerator: an initiator tap for access to the L2 Cache and a targettap to receive queue and stack data read and write operations from otherinitiators. The standard cmd bus for the A2B system bus has beenextended by two bits in order to support the queue/stack functions. Thebit patterns for the cmd bus and their meaning are illustrated in FIG.28.

The optional usr_r bus for the A2B tap is also employed to convey statusinformation for all queue/stack operations that result in the reading ofdata (Pop, Pop/Dec, and Peek.) The status reflects the queue/stackstatus after the desired operation has been carried out (e.g. if thelast entry in a queue is removed via a Pop operation, the data may bepresented along with an empty status indication.)

The usr_r bus is configured to be two bits wide and is illustrated inFIG. 29. The usr_r bus is returned along with the data on the responsecycle(s) of the A2B tap. In addition to the standard A2B tap logic, anumber of FIFOs may be employed in the A2B Tap blocks.

FIG. 30 illustrates an A2B Tap detailed block diagram. As each queueoperation is received, it undergoes a categorization operation. If thetarget queue is already in the Command/Address FIFO, it is placed in thePending Command/Address FIFO. If the target queue is not in theCommand/Address FIFO, it is placed there and the queue number is placedin the Queue FIFO along with its index in the Command/Address FIFO.Entries in the Queue FIFO are processed as soon as they are received anda slot is available in the L2 Cache B Port FIFO. The Queue FIFO entriesare converted into either descriptor fetches or descriptor extensionfetches, depending on the queue command associated with the entry.

As the master state machine begins processing a descriptor, itbroadcasts the queue number it is working on to the PendingCommand/Address FIFO. The FIFO searches all its entries for a match and,if found, asserts a request for the first entry that matches. The Queue,Command/Address, and Pending Command/Address FIFOs hold a plurality ofentries (eight in the current embodiment). The Data In and Data OutFIFOs hold up to eight times 64 bytes of data. The contents of the FIFOsare shown as a block diagram in FIG. 31.

Each line of the Command/Address and Response queues contain one or moredata fields and a valid bit (V). Each of these lines is associated witha 64 byte line in their associated Data In and Data Out queues. Ascommands are received, they are placed into the Command/Address Queue.If the command involves memory write operations (poke, push, andpush/inc), the data for the command is placed in the associated line inthe Data In Queue.

Commands that involve memory read operations or returned information(peek, pop, pop/dec) are routed through the Response and Data Outqueues. As data is received or generated, it is placed in the Data OutQueue. When all required data has been placed in the Data Out Queue, theassociated line in the Response Queue is filled with data copied fromthe Command/Address Queue and the line is marked as valid.

When all lines of the Command/Address Queue are valid (e.g. full), theA2B aqfull and wdfull signals are asserted. These two signals areidentical as there is guaranteed data input capacity for any commandreceived. When all lines of the response Queue are not valid (e.g.empty), the A2B rqmt signal is asserted.

In various embodiments, the A2R tap (interface) provides the means foran external component to access the registers within the MemoryStructure Accelerator (MSA) block. The A2R interface may be standardizedfor each block within the design that includes processor accessibleregisters.

The main MSA state machine is principally responsible for thefunctionality of the Memory Structure Accelerator. It controls accessesqueue/stack descriptors from system memory and moves queue and stackdata between the system bus and system memory. It updates thedescriptors and descriptor extensions and writes them to system memory.It also generates signaling when various events occur, such as crossinglow water mark, crossing high water mark, underflow, and overflow.

For an exemplary operation, the state machine's functions may be definedas follows: (a) Fetch the descriptor from system memory; (b) Fetch thedescriptor extension from system memory; (c) Receive descriptor anddescriptor extension; (c) Check for Error Conditions(Overflow/Underflow); (d) Process the operation (move data to/from thesystem bus from/to system memory as necessary); (e) Update thedescriptor and descriptor extension; (f) Write the descriptor to systemmemory; (g) Write the descriptor extension to system memory; and (h)Signal, interrupt, and generate reports to the queue flag as necessary.

Typically, each command is popped off the request FIFO and processes asabove. If the report to queue flag is generated, the state machinesequence is run through a second time for reporting.

In various embodiments, Queue State Flags hold temporary informationabout the status of the active queue/stack as data transfer progresses.Once data transfer has completed, the flags are examined and anyrequired signaling is carried out. Exemplary Queue State Flags comprise:(a) Going not empty; (b) Going empty; (c) Underflow; (d) Overflow; (e)Crossing high threshold; and (f) Crossing low threshold

In certain embodiments, working registers are configured to contain theactive versions of the descriptor and extension in operation. Theworking counters may be updated descriptor write pointers, updateddescriptor read pointers, and updated descriptor counts.

Typically, there are a series of ALU components within the Queue WorkingRegisters and Counters block. The functions of the block include: (a)Calculate bytes in queue/stack; (b) Determine cache line crossings; (c)Detect state flag conditions; (d) Select signaling based on condition;(e) Generate system memory addresses.

The Data Alignment block contains data to be transferred between theinitiator and the active queue/stack. Because the Memory StructureAccelerator supports non-word writes and reads, a barrel shifter may bepresent in the Queue Data Buffer to align data based on Queue DescriptorRead and Write Pointers. Data alignment may be carried out for bothwrite and read operations. However, the operation is different forwrites and reads.

For write operations, the A2B size may be used to determine which bytelanes of the data are valid, with the first valid byte beginning in themsbyte and proceeding to the right toward the Isbyte. This is thencoupled with the Queue Descriptor Write Pointer to determine theshifting of the data. As a result of the shift operation, it is possiblethat the incoming data will cross a 64-byte boundary. When this occurs,the Data Alignment block breaks the transfer into two accesses.

For read operations, the Queue Descriptor Read Pointer (for queues) orWrite Pointer (for stacks) may be used along with the A2B size todetermine which byte lanes from the Level 2 Cache data bus should beused to make up the data on the A2B bus. For reads, data may be Leftjustified in the 128-bit A2B read data bus.

As mentioned noted, when an operation generates a significant event,such as crossing a water mark, a single signal per command may begenerated. The signal can be either a hardware code or a status pushedinto another queue. Each event is individually programmable in order toprovide maximum flexibility. Hardware signaling is premised on thefollowing: when an event occurs, a code is placed on the msa_code busand the msa_valid signal is pulsed high for one clock. The handling of ahardware signal is generally implementation specific and a table ofcodes to be programmed for specific queues and stacks may be provided bythe hardware designers.

Software signaling generally involves designating one or morequeues/stacks to receive status information. Multiple queues can reportstatus to the same status queue. This desirable for aggregating a numberof queues into a single event queue, such as for iSCSI session dataqueues.

When using software signaling, there may be a limitation that softwaresignaling is configured only one level deep. That is, one or more queuescan signal into another queue, but that queue typically uses hardwaresignaling. If more than one level of software signaling is detected, anerror response may be sent to the initiator of the queue operation. Anexample of software signaling is shown in FIG. 32.

The following section provides details describing various firmwareconsiderations in iSNP design. Additional details regarding the variouscomponents and modules described herein may be found elsewhere in thespecification.

As shown in FIG. 33, there may be an empty queue/stack descriptorinitialization routine. Descriptors for empty queues/stacks may beinitialized as follows: (a) The Read Pointer, Write Pointer, Count, andHysteresis fields are generally set to zero. Other fields are set to thedesired values. (b) If High and Low watermark signaling is not desired,the Full Hi Level is set to 0xffff and the Full Lo Level should be setto 0x0000. This prevents the MSA from fetching the descriptor extensionfor the queue as the High Water Mark will not be reached. It istypically specified that all unused queues have their ‘Not Empty Signal’and ‘Underflow Signal’ fields set to interrupt one or more processors.By doing this, if an attempt is made to push or pop an unused queue, theevent can be detected. Further, it is typically specified that allunused queues be set to a small queue size (5) and their base addressesset to a safe memory region (e.g. a memory region that is not used bythe firmware.) By doing this, if an unused queue is pushed, no data willbe corrupted. Once a descriptor and descriptor extension have beeninitialized and queue operations begun, the descriptor will generallynot be written by firmware unless it can be guaranteed that no queueoperations are occurring to the queue who's descriptor or descriptorextension is being written to.

Queues and stacks can be initialized so that they appear to contain databefore their first use. This is accomplished by storing the desiredqueue data into system memory and then initializing the descriptor withthe Base Address of Data equal to the starting address of the data insystem memory, the Write Pointer equal to the number of bytes written tosystem memory, and the Count equal to the number of “units” of datawritten. A preloaded queue/stack descriptor initialization is shown inFIG. 34.

In various embodiments, information about the number of bytes and thecount of “items” in a queue or stack can be determined by interrogatingthe queue descriptor. For stacks, the value of the Write Pointer may bethe number of bytes in the stack. For queues, the number of bytes can becalculated by subtracting the Read Pointer from the Write Pointer andadjusting for negative. For example, according to the code sequence:

if (writepointer < readpointer)

-   -   by tes= writePo int er − readPointer + 2^(size+5)

else

-   -   bytes = writePointer − readPointer        For either a queue or a stack, the count of “items” is the value        of the Count field.

Referring again to FIG. 3B, a Reflective Memory Channel (RMC)

Interface may be associated with the memory system. The StorageController 108 (shown in FIG. 1) may be coupled to a second storagecontroller for fault-tolerance and failover. In this embodiment, the RMCprovides a means for transferring data to the second storage controller.In effect, data intended to be written to storage devices associatedwith a first storage controller and meta-data created by the associatedstorage controller application software may be copied (reflected) onto asecond storage controller.

The specific embodiments described herein are merely illustrative.Although described in terms of certain preferred embodiments, otherembodiments that are apparent to those of ordinary skill in the art,including embodiments which do not provide all of the benefits andfeatures set forth herein, are also within the scope of this invention.

Accordingly, it is to be understood that the patent rights arisinghereunder are not to be limited to the specific embodiments or methods'described in this specification or illustrated in the drawings, butextend to other arrangements, technology, and methods, now existing orhereinafter arising, which are suitable or sufficient for achieving thepurposes and advantages hereof.

1. A system for accelerated TCP and iSCSI protocol processing inhardware, the system comprising: a storage network processor (SNP)configured to offload at least some packet processing tasks from ageneral purpose processor associated with a host device, the storagenetwork processor further comprising: a hardware-accelerated receivemodule configured to receive TCP network packets; a hardware-acceleratedTCP and iSCSI protocol processing chip configured to process both TCPnetwork packets and iSCSI instructions embedded in TCP network packets,wherein processing of iSCSI instructions embedded in TCP network packetsincludes offloading common case iSCSI instructions embedded in TCPnetwork packets to process and resolve the embedded iSCSI instructionsin hardware; a hardware-accelerated transmit module configured totransmit TCP network packets; and a remote memory channel used totransfer data and meta-data to a partner storage controller to provideat least a degree of fault tolerance.
 2. The system of claim 1 whereinstorage data may be re-created on the partner storage controller.
 3. Asystem for accelerated TCP and iSCSI protocol processing in hardware,the system comprising: a storage network processor (SNP) configured tooffload at least some packet processing tasks from a general purposeprocessor associated with a host device, the storage network processorfurther comprising: a hardware-accelerated receive module configured toreceive TCP network packets; a hardware-accelerated TCP and iSCSIprotocol processing chip configured to process both TCP network packetsand iSCSI instructions embedded in TCP network packets, whereinprocessing of iSCSI instructions embedded in TCP network packetsincludes offloading common case iSCSI instructions embedded in TCPnetwork packets to process and resolve the embedded iSCSI instructionsin hardware; a hardware-accelerated transmit module configured totransmit TCP network packets; and a memory channel used to transfer dataand meta-data to a partner storage controller to provide at least adegree of fault tolerance.
 4. The system of claim 3 wherein storage datamay be re-created on the partner storage controller.